Closed jiangleligejiang closed 5 years ago
[A convertRect:B.frame toView:C];
[A convertRect:B.frame fromView:C];
[A convertPoint:B.center toView:C];
[A convertPoint:B.center fromView:C];
hitTest
进行透传点击事件针对一些特殊场景,一些视图可能不处于顶层,若需要这些视图能够接收到相应的点击事件,则需要重写
hitTest
方法来截取点击事件。- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { BOOL pointButton = CGRectContainsPoint(self.button.frame, point); BOOL pointView = CGRectContainsPoint(self.view.frame, point); if (pointButton || pointView) { return [super hitTest:point withEvent:event]; } return nil; }
opaque
属性的使用
opaque
表示为不透明,默认值为YES,表示不进行上下图层之间的颜色合成,反之,设置为NO,表示进行上下图层之间的颜色混合。
R = S + D * ( 1 – Sa ) //opaque为YES
R = S //opaque为NO
R:表示混合结果的颜色 S:是源颜色(位于上层的红色图层一) D:是目标颜色(位于下层的绿色图层二) Sa:是源颜色的alpha值,即透明度 引自
opaque
,只有当视图为透明或部分透明的时候,才需要将opaque
设置为YES。UIView
存储到集合中,需要考虑将其设置为弱引用方式来存储,具体可以参考这里
setNeedsLayout
与layoutIfNeeded
的区别layoutIfNeeded
不一定会调用layoutsubviews
setNeedsLayout
一定会调用layoutsubviews
方法,但不会立即调用,而是在下一轮runloop结束前