填充区域时如何屏蔽视图?

时间:2011-02-17 06:44:33

标签: iphone uiview masking

谁能告诉我如何在整个屏幕上放置一个半透明的黑色面具,但是特定的UIView的区域被排除在外?我想在UITextField上使用这个掩码,当点击文本字段的外部部分时,它会调用resignFirstResponder。

子视图树就像:

的UIWindow
| -UIView
| | -UITextField
|
| -mask

谢谢,

1 个答案:

答案 0 :(得分:0)

您可以使用:

- (void)bringSubviewToFront:(UIView *)view

添加黑色蒙版视图后,将UITextField发送到前面。

<强>更新

确定这是执行此操作的步骤(您可以查看UIGestureRecognizers的苹果示例了解更多信息)

  1. 创建一个掩码视图(以编程方式或使用IB)并将其命名为“maskView”。
  2. 创建一个gestureRecognizer并将其添加到maskView。

            UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
            recognizer.delegate = self;
            UIImageView *maskView =  [[UIImageView alloc] init];
            [maskView addGestureRecognizer:recognizer];
    
  3. 您需要将视图控制器设置为“UIGestureRecognizerDelegate”的委托

    @interface YourViewController : UIViewController   <UIGestureRecognizerDelegate>
    
  4. 当您想要屏蔽屏幕时,将maskView添加到ViewController。然后移动掩码上方的文本字段。

    [self.view addSubView:maskView]; [self.view bringSubviewToFront:textField];

  5. 设置这2个功能: 在第一个中,您可以在用户触摸蒙版时设置动作

    - (void)handleTapFrom:(UITapGestureRecognizer *)recognizer {
    //resign the first responder when the user taps the mask
     //you can remove the mask here if you want to   
    

    } 在第二个中,您告诉应用程序不要接收来自textField的触摸

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    
    // Disallow recognition of tap gestures in the segmented control.
    if ((touch.view == textField)) {//checks if the touch is on the textField
        return NO;
    }
    return YES;
    

    }

  6. 希望它有所帮助

    SHANI