
输入
|
101
解决方案
要告诉
iOS
某个点属于某个视图的
bounds
边界范围之内,可以覆盖
point(inside:
, with:)
方法。
在一个
UIView
子类中,覆盖这个方法:
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
//
如果点的位置落在视图
bounds
之外
40pt
范围内,
//
都可以认为它是位于视图内
return self.bounds.insetBy(dx: -40, dy: -40).contains(point)
}
讨论
当屏幕上发生一个触摸,
iOS
开始会判断到底是哪个视图被触摸。它从顶层视图开
始调用
point(inside:,with:)
方法,以此来判断触摸是否是在该视图之内发生。
然后它挨个询问顶层视图下面的子视图,看触摸还位于谁的范围之内,一直到最下
一层视图。
默认情况下,只有触摸位于视图的
bounds
矩形范围内,才会认为这个触摸与该视
图有关。但我们也可以通过覆盖
point(inside:,with:)
方法,以实现不同的行为。
point(inside:,with:)
方法的
point
参数表示屏幕上的一个点,使用的是视图的坐
标空间,如果要让这个点被判定为“视图之内”,则让该方法返回
true
;要让这
个点被判定为“视图之外”,则让该方法返回
false
。
3.8
识别摇晃手势
问题
如何识别用户正在摇晃设备?
解决方案
在视图控制器中加入如下代码: