jiangleligejiang / JNote

记录相关日常笔记
0 stars 0 forks source link

UIView相关内容 #21

Closed jiangleligejiang closed 5 years ago

jiangleligejiang commented 5 years ago

setNeedsLayoutlayoutIfNeeded的区别

两者的目的都是为了调用layoutsubviews方法,但setNeedsLayout方法表示标志为需要重新布局,会异步调用layoutIfNeeded方法刷新布局,不会立即刷新,而是在下一轮runloop结束前刷新。而layoutIfNeeded如果有需要刷新的标记,则会立即调用layoutsubviews进行布局(若没有设置标记,则不会调用layoutsubviews)。

jiangleligejiang commented 5 years ago

convertRect与convertPoint的使用

jiangleligejiang commented 5 years ago

使用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;
}
jiangleligejiang commented 5 years ago

opaque属性的使用

opaque表示为不透明,默认值为YES,表示不进行上下图层之间的颜色合成,反之,设置为NO,表示进行上下图层之间的颜色混合。

R = S + D * ( 1 – Sa ) //opaque为YES
R = S //opaque为NO

image

R:表示混合结果的颜色 S:是源颜色(位于上层的红色图层一) D:是目标颜色(位于下层的绿色图层二) Sa:是源颜色的alpha值,即透明度 引自

jiangleligejiang commented 5 years ago

若需要将UIView存储到集合中,需要考虑将其设置为弱引用方式来存储,具体可以参考这里