Property
center,position,anchorPoint
- center 描述当前view的中心点在父view上的位置。可通过如下方式计算
center.x = frame.origin.x + frame.size.width * 0.5; center.y = frame.origin.y + frame.size.height * 0.5; - position CALayer中的属性,当前layer在父layer中的位置
- anchorPoint CALayer中的属性,与positon相对。将一张纸钉在桌面上,钉子在纸上的位置就是anchorPoint,在桌面上的位置就是position
transform
UIView中CGAffineTransform类型属性transform,是定义在二维空间上完成View的平移、缩放、旋转等任务的。
创建基于控件初始位置的变换
- CGAffineTransformMakeTranslation
- CGAffineTransformMakeScale
- CGAffineTransformMakeRotation
创建基于transform参数的变换
- CGAffineTransformTranslate
- CGAffineTransformScale
- CGAffineTransformRotate
sizeToFit函数
Resizes and moves the receiver view so it just encloses its subviews
能够调整当前view,更贴合内部的subviews。以在UILabel中应用为例
UILabel *label = [[UILabel alloc] init];
label.frame = CGRectMake(300, 20, 30, 10);
label.backgroundColor = [UIColor greenColor];
//label.numberOfLines = 2;
label.text = @"12345670010101010";
[label sizeToFit];
[self.view addSubview:label];
解析
- 如果不设定
label.numberOfLines,UILabel会在一行显示所有的内容,如果内容足够多,label会超出屏幕的范围 - 如果设定
label.numberOfLines=0,并且内容需要多行显示,则每行在width的范围内,显示多行,直到显示出全部内容为止 - 如果设定
label.numberOfLines=1,则会在一行显示所有内容,如果内容足够多,label会超出屏幕的范围 - 如果设定
label.numberOfLines=n(n>1),并且内容需要多行显示,则每行在width的范围内,显示n行,如果不能完全显示内容,则最后一行会出现... -
注意:
sizeToFit函数必须在label设置完成后调用
与sizeThatFits的区别
-
sizeToFit计算出最合适的size,并将size改为计算出的size -
sizeThatFits计算出最合适的size,并返回该size,但不改变自身size -
sizeToFit会调用sizeThatFits
总结
- 由于这两个方法都会改变"UILabel"的宽度,因此想要
UILabel的宽度限定在某一固定宽度的范围内,就需要设定label.numberOfLines为大于1的数即可
removeFromSuperview
view调用了removeFromSuperview后,只是从superView上移除,但是view此时并不为nil(原因:还有指向view的指针,因此view的引用计数不为0),只是不在superView上显示了而已。有需要的话,需要显式设为nil(view = nil,view的引用计数为0)。
同样的,如果只是将view显式设为nil(此时view还被superview引用,引用计数不为0),view仍然显示在屏幕上。如果有需要的话,需要调用removeFromSuperview将其从屏幕上移除,此时引用计数变为0