UIView相关

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];
解析
  1. 如果不设定label.numberOfLinesUILabel会在一行显示所有的内容,如果内容足够多,label会超出屏幕的范围
  2. 如果设定label.numberOfLines=0,并且内容需要多行显示,则每行在width的范围内,显示多行,直到显示出全部内容为止
  3. 如果设定label.numberOfLines=1,则会在一行显示所有内容,如果内容足够多,label会超出屏幕的范围
  4. 如果设定label.numberOfLines=n(n>1),并且内容需要多行显示,则每行在width的范围内,显示n行,如果不能完全显示内容,则最后一行会出现...
  5. 注意:sizeToFit函数必须在label设置完成后调用
与sizeThatFits的区别
  • sizeToFit计算出最合适的size,并将size改为计算出的size
  • sizeThatFits计算出最合适的size,并返回该size,但不改变自身size
  • sizeToFit会调用sizeThatFits
总结
  1. 由于这两个方法都会改变"UILabel"的宽度,因此想要UILabel的宽度限定在某一固定宽度的范围内,就需要设定label.numberOfLines为大于1的数即可

removeFromSuperview

view调用了removeFromSuperview后,只是从superView上移除,但是view此时并不为nil(原因:还有指向view的指针,因此view的引用计数不为0),只是不在superView上显示了而已。有需要的话,需要显式设为nil(view = nilview的引用计数为0)。
同样的,如果只是将view显式设为nil(此时view还被superview引用,引用计数不为0),view仍然显示在屏幕上。如果有需要的话,需要调用removeFromSuperview将其从屏幕上移除,此时引用计数变为0

参考

  1. CALayer相关

你可能感兴趣的:(UIView相关)