addSubview 和 insertSubView 区别
子视图是以栈的方式存放的。
每次addsubview时都是在最后面添加。
每次在addsubview前和addsubview后可以看看[self.view.subViews count];
你看看你的子视图是被添加到哪个位置了。
另外[self.view addSubView:xx.view] 其实就等于[self.view insertSubView:xx.view atIndex:[self.view.subViews count]];
即在最顶层添加view。
总之:
addSubview是一层一层往上加,新加的只能放到最上层,
insertSubView可以控制将view添加到指定的层。
参考:addSubview和insertSubview 区别
CGAffineTransformMakeTranslation 和 CGAffineTransformTranslate
参考:CGAffineTransformMakeTranslation/CGAffineTransformTranslate的区别
1.CGAffineTransformMakeTranslation每次都是以最初位置的中心点为起始参照
CGAffineTransformTranslate每次都是以传入的transform为起始参照
CGAffineTransformIdentity为最初状态,即最初位置的中心点
2.3个按钮,bt1,bt2,bt3,bt1和bt2控制bt3的移动
(IBAction)bt1clicked:(id)sender {
self.bt3.transform = CGAffineTransformMakeTranslation(10, 0);
}
(IBAction)bt2clicked:(id)sender {
//self.bt3.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 10, 0);
self.bt3.transform = CGAffineTransformTranslate(self.bt3.transform, 10, 0);
}
点击bt1,第一次移动10个像素,以后都是以最初位置的中心点为起始参照,所以后续bt1无论点击多少次,按钮都在初始位置偏移10个像素的位置不动
点击bt1一次,再点击bt2一次,偏移20像素,点击bt2时,上一次按钮点击的偏移作为这次的参照
只点击bt2一次,偏移10个像素
不断点击bt2,bt3不断偏移10个像素
bt2clicked的第一句不注释:
第一次点击bt2,bt3偏移20,后续再点击,永远再第一次点击后的位置,再点击bt1,回到初始偏移10的位置(往回走了10)
点击bt1,偏移10,再点击bt2,在bt1点击基础上再偏移10,后续再点击不动( CGAffineTransformTranslate(CGAffineTransformIdentity, 10, 0);每次都是从最初位置开始偏移)
网友评论