1、UIView 与 CALayer 区别
UIView可以传递事件而CALayer无法参与事件传递,这个主要由于UIkit中使用UIResponder作为相应对象,UIKit中都直接或间接继承UIResponder,而CALayer则是继承NSObject,没有相应事件处理接口。
CALayer 主要功能在于绘制UI,如果在不需要处理相应事件时可以直接使用CALAyer进行绘制,提高性能,UIView可以理解成CALayer的载体,为其扩展可以进行事件传递。
2、frame 与 bounds 区别
frame 是UIView在意父视图坐标系为基准的位置、大小
bounds 是UIView在意自身坐标系为基准的位置、大小
例子:
例子 1
UIView*aView = [[UIViewalloc]init];
aView.frame=CGRectMake(100,100,100,100);
aView.transform = CGAffineTransformMakeScale(2, 2);
aView 的 frame (50,50,200,200)
aView 的 bounds (0,0,100,100)
例子 2
UIView*bView = [[UIViewalloc]init];
bView.frame=CGRectMake(100,100,100,100);
bView 的 frame (100,100,100,100)
bView 的 bounds (0,0,100,100)
总结:
由例子1与列子2可以知道bounds在修改frame或者进行缩放、旋转等操作不会改变,而frame却会因为缩放、旋转变化而变化。
因为frame的位置是由 position 与 anchorPoint 决定
公式为:
frame.x = position.x - anchorPoint.x * width
frame.y = position.y - anchorPoint.y * height
position 与 anchorPoint
position 与 anchorPoint 都是CALayer的属性
position是layer中的anchorPoint在superLayer中的位置坐标
anchorPoint 又称锚点,默认为(0.5,0.5),是作为缩放、旋转等进行动画操作将以该点作为中心点进行对应的动画行为
互不影响原则:单独修改position与anchorPoint中任何一个属性都不影响另一个属性。
公式为:
position.x = frame.origin.x + anchorPoint.x * width;
position.y = frame.origin.y + anchorPoint.y * height;
网友评论