模拟单击按下的按钮

时间:2013-10-22 13:57:32

标签: iphone ios uigesturerecognizer uitapgesturerecognizer tap

如标题所示,想点击屏幕,屏幕会有点暗半透明,而手指离开屏幕,屏幕又恢复正常,这与UIButton的相似。

在这种情况下,我知道UIButton要容易得多,但这里只是一个样本

我的代码如下:

- (IBAction)tapped:(UITapGestureRecognizer *)sender
{
    UIView * tintView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    [self.view addSubview:tintView];

    switch (sender.state) {
        case UIGestureRecognizerStateRecognized: {
        [tintView setBackgroundColor:[UIColor colorWithRed:.25 green:.25 blue:.25 alpha:.5]];
        NSLog(@"begin");
    }
    default: {
        [tintView setBackgroundColor:[UIColor clearColor]];
        NSLog(@"ended");
    }
    }
}

但是,点击屏幕时,虽然在控制台中捕获了beginended,但它不会像上面的代码那样更改。

如果在casedefault之间交换这些代码,请

    switch (sender.state) {
        case UIGestureRecognizerStateRecognized: {
        [tintView setBackgroundColor:[UIColor clearColor]];
        NSLog(@"begin");
    }
    default: {
        [tintView setBackgroundColor:[UIColor colorWithRed:.25 green:.25 blue:.25 alpha:.5]];
        NSLog(@"ended");
    }
    }

beginended可能会显示在控制台中,但点击时屏幕会变暗和变暗,永远不会恢复正常,颜色会很清晰。

我的代码出了什么问题?如何实现?

谢谢!

2 个答案:

答案 0 :(得分:1)

[self performSelector:withObject:afterDelay:]将是通常的方式来完成这样的事情。

您设置的方法会分别解除暗视图,然后将其作为选择器引用

[self performSelector:@selector(methodWhichDismissesDarkView:) withObject:nil afterDelay:0.2]

在使视图变暗后立即调用此方法,0.2秒后它将会触发。

要真正做到这一点,请确保您可以优雅地处理延迟期间发生的中断:

[NSObject cancelPreviousPerformRequestsWithTarget:self];

当应用不再需要处理时,将取消待处理操作。

答案 1 :(得分:0)

按照@ryancumley的提示,下面是更新的代码。

@property (strong, nonatomic)  UIView * tintView;
@synthesize tintView;

- (IBAction)tapped:(UITapGestureRecognizer *)sender
{
        switch (sender.state) {
        case UIGestureRecognizerStateRecognized: {
            [self.tintView setBackgroundColor:[UIColor colorWithWhite:0.000 alpha:0.150]];
            [self performSelector:@selector(setTintView:) withObject:nil afterDelay:.25];
            NSLog(@"begin");
        }
        default: {
            break;
            NSLog(@"ended");
        }
    }
}

- (void)setTintView:(UIView *)tintView
{
    [self.tintView setBackgroundColor:[UIColor colorWithRed:.25 green:.25 blue:.25 alpha:0]];
}

它最终起作用,看起来像点击一个按钮。但是,NSLog(@"ended")未触发。

为什么我的原版不起作用?

这是更新的正确方法还是解决方法?