在iPhone上点击背景图像

时间:2013-08-05 10:29:55

标签: ios

我想在iPhone上点击背景时做点什么。

如何启用背景点击?

我使用此代码在我的应用上添加了示例背景。

- void viewDidLoad{

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

如何进行背景攻击?

例如,我想点击背景,会弹出一条消息" 点击背景!"

我需要IBAction吗?

需要帮助。

2 个答案:

答案 0 :(得分:0)

你可以做的是使用IBAction,这将是一个更简单的代码。

在视图控制器的头文件中,执行以下操作:

- (IBAction)backgroundTap:(id)sender;

在视图控制器的实现文件中,执行以下操作:

- (IBAction)backgroundTap:(id)sender
{

}

在故事板中,假设您已将视图控制器GUI与视图控制器类链接,请单击视图控制器GUI的背景,然后在“实用程序”视图中显示Identity Inspector,该视图应显示在右侧。然后,在自定义类(当前应为空)下,键入UIControl。现在转到连接检查器并将Touch Down链接到后台,选择backgroundTap。现在,backgroundTap方法中的任何内容都将是您选择背景时会发生的事情。

答案 1 :(得分:-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];
}

顺便说一句,没有必要绘制背景图像,因为[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仍然为时不晚。