子视图是以栈的方式存放的。
栈:
"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方;
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表(单口),它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据,就像弹夹装弹一样;
压栈的操作使得栈顶的地址减小,弹出的操作使得栈顶的地址增大。(栈的大小一定,入栈时地址会越来越小,出站地址会变大);
self.view.subViews
[self.view addSubview:redView];
[self.view addSubview:blueView];
总结:addSubview是一层一层往上加,新的放到最上层(有点千层饼的味道);
insertSubView
[self.view addSubview:redView];
[self.view addSubview:blueView];
aboveSubview
[self.view addSubview:redView];
[self.view addSubview:blueView];
[self.view insertSubview:greenView aboveSubview:redView]; //在self.View上的redView上面插入greenView
belowSubview
[self.view addSubview:redView];
[self.view addSubview:blueView];
//加载到redView视图之下
[self.view insertSubview:greenView belowSubview:redView]; ////在self.View上的redView下面插入greenView;
[self.view insertSubview:CustomView atIndex:[self.view.subviews count]];
最下面:
[self.view insertSubview:CustomView atIndex:0];
由此可见,最下层index是从0开始的数组;
- //将Subview从当前的UIView中移除
- [Subview
removeFromSuperview];
- //将Subview往前移动一个图层(与它的前一个图层对调位置)
- [UIView
bringSubviewToFront:Subview];
- //将Subview往后移动一个图层(与它的后一个图层对调位置)
- [UIView
sendSubviewToBack:Subview];
- //交换两个图层
- [UIView
exchangeSubviewAtIndex:indexA withSubviewAtIndex:indexB];
- //取得Index
- NSInteger
index = [[UIView subviews] indexOfObject:Subview名称];
- //加上註记
- [Subview
setTag:NSInteger];
- //取的UIView下的所有Subview
- [UIView
subviews]
如果要移除一个 UIView 的所有子视图,SDK 里没有 remove all 之类的方法。可以用 for loop 循环调用 – removeFromSuperview 来移除
例如:
for(UIView *view in [self.view subviews])
{
}
CGAffineTransform的使用
1.CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)(平移:设置平移量)
2.CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)(缩放:设置缩放比例)仅通过设置缩放比例就可实现视图扑面而来和缩进频幕的效果。
3.CGAffineTransformMakeRotation(CGFloat angle)(旋转:设置旋转角度)
以上3个都是针对视图的原定最初位置的中心点为起始参照进行相应操作的,在操作结束之后可对设置量进行还原:
view.transform=CGAffineTransformIdentity;