控件移动,放大,缩小,旋转
1,代码添加控件
例如:
[objc]view plaincopy/* 1.创建一个控件 2.设置控件的位置,大小 3.设置控件所需要的各个属性 4.添加入父控件 5.添加监听 */ UIButton*btn1=[[UIButtonalloc]init];//创建一个控件 btn1.frame=CGRectMake(20,20,100,100);//设置控件的位置,大小 [btn1setTitle:@"123"forState:UIControlStateNormal];//设置控件所需要的各个属性 [btn1setBackgroundImage:[UIImageimageNamed:@"btn_01"]forState:UIControlStateNormal]; [btn1setTitle:@"456"forState:UIControlStateHighlighted]; [btn1setBackgroundImage:[UIImageimageNamed:@"btn_02"]forState:UIControlStateHighlighted]; [self.viewaddSubview:btn1];//添加入父控件 [btn1addTarget:selfaction:@selector(clickMove:)forControlEvents:UIControlEventTouchUpInside];//添加监听
2.控件的常见属性
所有的UI控件最终都继承自UIView:
UI控件的公共属性都定义在UIView中
[objc]view plaincopy@property(nonatomic,readonly)UIView*superview;//获得自己的父控件对象 @property(nonatomic,readonly,copy)NSArray*subviews;//获得自己的所有子控件对象 @property(nonatomic)NSIntegertag;//控件的ID(标识),父控件可以通过tag来找到对应的子控件 @property(nonatomic)CGAffineTransformtransform;//控件的形变属性(可以设置旋转角度、比例缩放、平移等属性) @property(nonatomic)CGRectframe;//控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点) @property(nonatomic)CGRectbounds;//控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x、y一般为0) @property(nonatomic)CGPointcenter;//控件中点的位置(以父控件的左上角为坐标原点)
3.UIView的常见方法
[objc]view plaincopy-(void)addSubview:(UIView*)view;//添加一个子控件view -(void)removeFromSuperview;//从父控件中移除 -(UIView*)viewWithTag:(NSInteger)tag;//根据一个tag标识找出对应的控件(一般都是子控件) //注意:下面代码是错误的,OC语法规定:不允许直接修改对象的结构体属性的成员 self.headBtn.frame.origin.y-=10;
图片移动的3中方式
1. transform方式来移动图片 (最常用)
[objc]view plaincopytypedefenum{ kMovingDirTop, kMovingDirBottom, KMovingDirLieft, kMovingDirRight, kMovingDir; //已fram点来移动(注意图片旋转后,移动的方向) switch(btn.tag){ casekMovingDirTop: //改变控件的位置 self.headImageView.transform=CGAffineTransformTranslate(self.headImageView.transform,0,-20); break; casekMovingDirBottom: self.headImageView.transform=CGAffineTransformTranslate(self.headImageView.transform,0,20); break; caseKMovingDirLieft: self.headImageView.transform=CGAffineTransformTranslate(self.headImageView.transform,-20,0); break; casekMovingDirRight: self.headImageView.transform=CGAffineTransformTranslate(self.headImageView.transform,20,0); break; default: break; };
2. 使用center来移动控件
[objc]view plaincopy//以中心点来移动(注意图片旋转后,移动的方向) CGPointp=self.headImageView.center; switch(btn.tag){ casekMovingDirTop: //改变控件的位置 p.y-=20; break; casekMovingDirBottom: p.y+=20; break; caseKMovingDirLieft: p.x-=20; break; casekMovingDirRight: p.x+=20; break; default: break; }; self.headImageView.center=p;
3.使用frame来控制控件位置
[objc]view plaincopy//会出现问题。(如果先旋转图片后,在点击移动图片会消失不见?????) CGRectrect=self.headImageView.frame; switch(btn.tag){ casekMovingDirTop: //改变控件的位置 rect.origin.y=rect.origin.y-20; break; casekMovingDirBottom: rect.origin.y=rect.origin.y+20; break; caseKMovingDirLieft: rect.origin.x=rect.origin.x-20; break; casekMovingDirRight: rect.origin.x=rect.origin.x+20; break; default: break; }; elf.headImageView.frame=rect;
放大,缩小,旋转控件(3种方式)[objc]view plaincopytypedefenum{ kAdd=5, KRemore, kRotateLeft, kRotatelRight, }kTranform;
1.transform方式,放大,缩小,旋转控件 (最常用)[objc]view plaincopy/*会以中心点来放大,缩小,旋转控件*/ switch(btn.tag){ casekAdd: //改变控件的大小 self.headImageView.transform=CGAffineTransformScale(self.headImageView.transform,1.2,1.2); break; caseKRemore: self.headImageView.transform=CGAffineTransformScale(self.headImageView.transform,0.8,0.8); break; casekRotateLeft: //在OC中,所有跟角度相关的数值,都是弧度值,180°=M_PI //正数表示顺时针旋转 //负数表示逆时针旋转 self.headImageView.transform=CGAffineTransformRotate(self.headImageView.transform,-M_PI_4); break; casekRotatelRight: self.headImageView.transform=CGAffineTransformRotate(self.headImageView.transform,M_PI_4); break; default: break; };
2. bounds方式,放大,缩小[objc]view plaincopy/*会以控件顶点来放大,缩小,然后计算出frame的x,y后再移动回去。启用动画效果时,一瞬间放大,然后移动到计算出的frame的x,y位置*/ CGRectrect=self.headImageView.bounds; switch(btn.tag){ casekAdd: rect.size.width+=20; rect.size.height+=20; break; caseKRemore: rect.size.width-=20; rect.size.height-=20; break; default: break; }; self.headImageView.bounds=rect;
3.2. frame方式,放大,缩小[objc]view plaincopy/*会以控件顶点来放大,缩小*/ CGRectrect=self.headImageView.frame; switch(btn.tag){ casekAdd: rect.size.width+=20; rect.size.height+=20; break; caseKRemore: rect.size.width-=20; rect.size.height-=20; break; default: break; }; self.headImageView.frane=rect;
总结:
通过以下属性可以修改控件的位置
frame.origin
center
通过以下属性可以修改控件的尺寸
frame.size
bounds.size
利用transform属性可以修改控件的位移(位置)、缩放、旋转
如果觉得《IOS代码添加控件 控件移动 放大 缩小 旋转》对你有帮助,请点赞、收藏,并留下你的观点哦!