2013-08-05 143 views
0

我想在iPhone上點擊背景時做點什麼。在iPhone上點擊背景圖片

如何啓用背景竊聽?

我使用此代碼在我的應用程序上放置了一個示例背景。

- void viewDidLoad{ 

    [super viewDidLoad]; 
    UIGraphicsBeginImageContext(self.view.frame.size); 
    [[UIImage imageNamed:@"backgroundimage.jpeg"] drawInRect:self.view.bounds]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
} 

如何做背景拍打?

例如,我想單擊背景並彈出一條消息「背景被挖掘!」

我需要IBAction嗎?

需要幫助。

+4

您之前是否曾使用過Tap Gesture Recognisers?如果沒有,那麼我建議你按照這個教程開始: http://www.raywenderlich.com/6567/uigesturerecognizer-tutorial-in-ios-5-pinches-pans-and-more –

+0

嘗試UIButton或,作爲Puneet建議,UIGestureRecognizer。 – johnyu

回答

-1

UIButton是最簡單的方法。

- (void)backgroundButtonClicked:(id)sender 
{ 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:@"Background was tapped!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alertView show]; 
    [alertView release]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    /* 
    * Your other code here 
    */ 
    UIButton *backgroundButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    backgroundButton.backgroundColor = [UIColor clearColor]; 
    backgroundButton.frame = self.view.bounds; 
    [backgroundButton addTarget:self action:@selector(backgroundButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:backgroundButton]; 
    [self.view sendSubviewToBack:backgroundButton]; 
} 

BTW,沒有必要繪製背景圖片,因爲[UIImage imageNamed:@"imagename"]返回的圖像。如果你想呈現它,嘗試將代碼在你-viewDidLoad

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"backgroundimage.jpeg"]]; 
imageView.frame = self.view.bounds; 
[self.view insertSubview:imageView belowSubview:backgroundButton]; 
[imageView release]; 

編輯:

感謝@AlexMDC提醒我UITapGestureRecognizer。以下是UITapGestureRecognizer版本:

- (void)tapped:(UITapGestureRecognizer *)g 
{ 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:@"Background was tapped!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alertView show]; 
    [alertView release]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    /* 
    * Your other code here 
    */ 
    UITapGestureRecognizer*tap = [[UITapGestureRecognizer alloc] init]; 
    [tap addTarget:self action:@selector(tapped:)]; 
    [self.view addGestureRecognizer:tap]; 
    [tap release]; 
} 

兩個版本都符合要求。無可否認,UITapGestureRecognizer更強大,更靈活。不過,我更喜歡UIButton這次做的伎倆。它比手勢識別器更輕量。我不需要關心手勢識別器的狀態,觸摸事件是否被它阻止,或者如何實現UIGestureRecognizerDelegate
更可能的情況是我們想在控制器的視圖上添加一些其他UIViewUIView的子類。此時,UITapGestureRecognizer版本需要排除– gestureRecognizerShouldBegin:委託方法中的所有非背景區域。
如果檢測到雙擊是新的要求,那麼將UIButton重構爲UITapGestureRecognizer還不算晚。

+1

我不同意。附加到'self.view'的'UITapGestureRecognizer'是一個更好的解決方案。 –

0

你可以做的是使用IBAction,這將是一個更簡單的代碼。

在您的視圖控制器的頭文件,這樣做:

- (IBAction)backgroundTap:(id)sender; 

在您的視圖控制器的實現文件中,這樣做:

- (IBAction)backgroundTap:(id)sender 
{ 

} 

在故事板,假設你有將視圖控制器GUI與視圖控制器類相關聯,單擊視圖控制器GUI的背景,然後在實用程序視圖中顯示Identity Inspector,該視圖應顯示在右側。然後,在目前空白的自定義類下,輸入UIControl。現在轉到連接檢查器並在Touch Down鏈接到背景,選擇backgroundTap。現在,當您選擇背景時,backgroundTap方法內的任何內容都將會發生。