UIGestureRecognizer仅在屏幕的一部分上

时间:2016-12-08 19:07:15

标签: ios iphone swift uigesturerecognizer

如果查看图片,您会看到 textview 按钮滑块

我已完成除最后一步之外的所有步骤,当我点击滑块时,它会不断消失。我知道它消失了,因为我实现了UITapGestureRecognizer。

我想我的问题是,我希望每次点击屏幕上的任何地方时滑块都会消失但当我使用滑块时,我不希望滑块消失现在每次都会发生这种情况我释放了我的水龙头。

我已尝试在sizeRefont中再实现一个UITapGestureRecognizer,其函数是将sizeRefont.isHidden设为false,但是当我这样做时,只要点击屏幕,滑块就不会消失。

我尝试在sizeRefont动作中放入sizeRefont.isHidden = false,它也不起作用。

class ResizeController: UIViewController {

@IBOutlet weak var sizeRefont: UISlider!
@IBOutlet weak var textView: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissRefontSize(_:)))
    view.addGestureRecognizer(tap)
}

@IBAction func sizeRefont(_ sender: AnyObject) {
    let fontSize = CGFloat(sizeRefont.value)
    textView.font = UIFont(name: textView.font!.fontName, size: fontSize * 30.0)
}


@IBAction func showSlider(_ sender: Any) {
    sizeRefont.isHidden = false
}


func dismissRefontSize(_ sender: UITapGestureRecognizer) {
    if sender.location(in: sizeRefont){
        sizeRefont.isHidden = false
    } else {
        sizeRefont.isHidden = true
    }

}

}

如果sender.location(in:sizeRefont),则表示CGPoint无法转换为Bool

Image

1 个答案:

答案 0 :(得分:2)

您需要做的第一件事是您需要将dismissRefontSize()方法调整为以下内容:

func dismissRefontSize(_ sender: UITapGestureRecognizer) {
 let location = sender.location(in: view) 
If sizeReFont.frame.contains(location) {
// do nothing
}else {

sizeReFont.isHidden = true 
}
}

您需要调整的另一件事是将viewDidLoad()中识别的点击创建为以下内容:

let tap = UITapGestureRecognizer(target: self, action : #selector(dismissRefontSize(_:)))