屏幕上能看得见摸得着的东西就是UIView,比如屏幕上的按钮、文字、图片,所以UIButton、UILabel、UITextField等等控件都是继承自UIView的,所以都会具有UIView的属性和方法,这里主要学习的是frame、center、bounds、transframe属性。
//控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点) @property(nonatomic) CGRect frame; //控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x、y一般为0) @property(nonatomic) CGRect bounds; //控件中点的位置(以父控件的左上角为坐标原点) @property(nonatomic) CGPoint center; //可以对控件进行平移、缩放比例和旋转角度 @property(nonatomic) CGAffineTransform transform;
对一个控件进行移动、放大、缩小或者旋转就可以用以上的4种属性,看注释也可以知道,transform的作用更大,所以要学好transform。有以下创建方法CGAffineTransformMakeTranslation(平移)、CGAffineTransformMakeScale(缩 放)、CGAffineTransformMakeRotation(旋转)都是相对于控件初始位置的而发生的形变(平移、缩放、旋转);而 CGAffineTransformTranslate(平移)、CGAffineTransformScale(缩放)、 CGAffineTransformRotate(旋转)都是相对于基于CGAffineTransform t参数而发生的形变(平移、缩放、旋转)。这里的radians,弧度,都是180° = M_PI。
#pragma mark 旋转 //注意旋转角度必须是弧度,不是角度 CGFloat angle = M_PI_4; //使用CGAffineTransformMakeRotation获得一个旋转角度形变 //但是需要注意CGAffineTransformMakeRotation的旋转不会自动在原来的角度上进行叠加,所以下面的方法旋转一次以后再点击按钮不会旋转了(下面的移动和缩放也是类似) _imageView.transform=CGAffineTransformMakeRotation(angle); //而CGAffineTransformRotate说可以在原来的基础上产生一个新的角度 _imageView.transform = CGAffineTransformRotate(_imageView.transform, angle); #pragma mark 缩放 CGFloat scalleOffset=0.9; _imageView.transform=CGAffineTransformMakeScale(scalleOffset, scalleOffset); _imageView.transform= CGAffineTransformScale(_imageView.transform, scalleOffset, scalleOffset); #pragma mark 移动 CGFloat translateY = 30; _imageView.transform=CGAffineTransformMakeTranslation(0, translateY); _imageView.transform = CGAffineTransformTranslate(_imageView.transform, 0, translateY);
当然了,这些形变最好还是配上动画才好看。
[UIView animateWithDuration:1.0 animations: ^{ _imageView.transform = CGAffineTransformTranslate(_imageView.transform, 0, translateY); }];//UIView的类方法