en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

8.15.2011

簡單使用 UICalloutView 提示視窗的方法

 

Call View 可以替您目前所操作的介面加上簡單的註解,而這種方法在 Google Map 的應用程式裡就很常被使用,下列程式碼就提供了一個簡單的示範,好讓 UICalloutView 出現在我們所要的位置上,其程式碼如下。

由於 UICalloutView 這個類別是屬於非正式(隱藏)的類別,所以在使用上必須重新進行標頭資訊的定義,因此我們首先新增一個標頭檔 UICalloutView.h,並鍵入以下資訊。

#import <foundation/foundation.h>

@interface UICalloutView : UIControl

    - (UICalloutView *)initWithFrame:(struct CGRect)aFrame;
    - (void)fadeOutWithDuration:(float)duration;
    - (void)setTemporaryTitle:(NSString *)fp8;
    - (NSString *)temporaryTitle;
    - (void)setTitle:(NSString *)fp8;
    - (NSString *)title;
    - (void)setSubtitle:(NSString *)fp8;
    - (NSString *)subtitle;
    - (void)addTarget:(id)target action:(SEL)selector;
    - (void)removeTarget:(id)target;
    - (void)setDelegate:(id)delegate;
    - (id)delegate;
    - (void)setAnchorPoint:(struct CGPoint)aPoint boundaryRect:(struct CGRect)aRect animate:(BOOL)yorn;

@end

在完成建立 UICalloutView.h 之後,就可以參考以下程式碼製作提示視窗 Tips View 了,別忘記在要使用 UICalloutView Class 的類別中引用 UICalloutView.h。

#import "UICalloutView.h"
//點擊畫面時所觸發的事件
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {

    //取得點擊的座標位置
    CGPoint point = [[touches anyObject] locationInView:self.view];

    //建立一個UICalloutView並設定垂直與水平置中
    UICalloutView *myTaps = [[UICalloutView alloc] initWithFrame:CGRectZero];
    myTaps.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    myTaps.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

    //設定UICalloutView的文字內容
    [myTaps setTemporaryTitle:@"Furnace iOS 棒棒!!"];

    //設定在多少時間內漸隱
    [myTaps fadeOutWithDuration:3.0f];

    //設定UICalloutView出現的位置與最大邊界
    [myTaps setAnchorPoint:point boundaryRect:CGRectMake(0.0f, 0.0f, 320.0f, 100.0f) animate:YES];

    //顯示於畫面後並釋放記憶體
    [self.view addSubview:myTaps];
    [myTaps release];
}

ps:其實 UICalloutView 一直都是存在的,只是缺少標頭檔我們沒辦法呼叫其中的 Method 如此而已,另外有熱心讀者指出,此方法屬於非正式方式,因此在 Apple 上架審核的過程中可能會無法順利通過,若要解決此問題可以參考 CMPopTipView 提示訊息的 Open Source,製作新的 UICalloutView 類別。






2 則留言:

  1. 匿名3/03/2012

    "若要解決此問題可以參考留言內的 Open Source 連結"
    請問去哪裡看留言阿 @@ 謝謝

    回覆刪除
    回覆
    1. 哈哈,我昏頭了~因為留言系統重新換過的關係,感謝您發現這個問題,連接我已經補上了XD,真的非常抱歉~~

      另外提醒您,此方式在ios 5.1同樣屬於非正式方法,如果想要上架還是需要使用連結內的 open source 才行唷。

      刪除