日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS代码添加控件,控件移动,放大,缩小,旋转

發布時間:2025/6/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS代码添加控件,控件移动,放大,缩小,旋转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

控件移動,放大,縮小,旋轉


1,代碼添加控件

例如:

[objc]?view plaincopy
  • ???/*?
  • ????1.創建一個控件?
  • ????2.設置控件的位置,大小?
  • ????3.設置控件所需要的各個屬性?
  • ????4.添加入父控件?
  • ????5.添加監聽?
  • ?????
  • ????*/??
  • ?????
  • ?????
  • ???UIButton?*btn1=[[UIButton?alloc]?init];?//?創建一個控件??
  • btn1.frame=CGRectMake(20,?20,?100,?100);?//?設置控件的位置,大小??
  • ???[btn1?setTitle:@"123"?forState:UIControlStateNormal];?//?設置控件所需要的各個屬性??
  • ???[btn1?setBackgroundImage:[UIImage?imageNamed:@"btn_01"]?forState:UIControlStateNormal];??
  • ???[btn1?setTitle:@"456"?forState:UIControlStateHighlighted];??
  • ???[btn1?setBackgroundImage:[UIImage?imageNamed:@"btn_02"?]?forState:UIControlStateHighlighted];??
  • ???[self.view?addSubview:btn1];?//?添加入父控件??
  • [btn1?addTarget:self?action:@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)?NSInteger?tag;?//控件的ID(標識),父控件可以通過tag來找到對應的子控件??
  • ??
  • @property(nonatomic)?CGAffineTransform?transform;?//控件的形變屬性(可以設置旋轉角度、比例縮放、平移等屬性)??
  • ??
  • @property(nonatomic)?CGRect?frame;?//?控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角為坐標原點)??
  • ??
  • @property(nonatomic)?CGRect?bounds;?//?控件所在矩形框的位置和尺寸(以自己左上角為坐標原點,所以bounds的x、y一般為0)??
  • ??
  • @property(nonatomic)?CGPoint?center;?//?控件中點的位置(以父控件的左上角為坐標原點)??

  • 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 plaincopy
  • typedef?enum{??
  • ????kMovingDirTop,??
  • ????kMovingDirBottom,??
  • ????KMovingDirLieft,??
  • ????kMovingDirRight,??
  • kMovingDir;??
  • ??
  • ????//?已fram點來移動(注意圖片旋轉后,移動的方向)??
  • ????switch?(btn.tag)?{??
  • ????????case?kMovingDirTop:??
  • ????????????//?改變控件的位置??
  • ????????????self.headImageView.transform?=?CGAffineTransformTranslate(self.headImageView.transform,?0,?-20);??
  • ????????????break;??
  • ????????case?kMovingDirBottom:??
  • ????????????self.headImageView.transform?=?CGAffineTransformTranslate(self.headImageView.transform,?0,?20);??
  • ????????????break;??
  • ????????case?KMovingDirLieft:??
  • ????????????self.headImageView.transform?=?CGAffineTransformTranslate(self.headImageView.transform,?-20,?0);??
  • ????????????break;??
  • ????????case?kMovingDirRight:??
  • ????????????self.headImageView.transform?=?CGAffineTransformTranslate(self.headImageView.transform,?20,?0);??
  • ????????????break;??
  • ??????????????
  • ????????default:??
  • ????????????break;??
  • ????};??

  • 2. 使用center來移動控件

    [objc]?view plaincopy
  • //?以中心點來移動?(注意圖片旋轉后,移動的方向)??
  • CGPoint?p?=?self.headImageView.center;??
  • ??
  • switch?(btn.tag)?{??
  • ????case?kMovingDirTop:??
  • ????????//?改變控件的位置??
  • ????????p.y?-=?20;??
  • ????????break;??
  • ????case?kMovingDirBottom:??
  • ????????p.y?+=?20;??
  • ????????break;??
  • ????case?KMovingDirLieft:??
  • ????????p.x?-=?20;??
  • ????????break;??
  • ????case?kMovingDirRight:??
  • ????????p.x?+=?20;??
  • ????????break;??
  • ??
  • ????default:??
  • ????????break;??
  • };??
  • ??
  • self.headImageView.center?=?p;??


  • 3.使用frame來控制控件位置

    [objc]?view plaincopy
  • ?//?會出現問題。(如果先旋轉圖片后,在點擊移動圖片會消失不見?????)??
  • ??
  • ?????CGRect?rect=self.headImageView.frame;??
  • ?switch?(btn.tag)?{??
  • ?????case?kMovingDirTop:??
  • ?????????//?改變控件的位置??
  • ?????????rect.origin.y?=?rect.origin.y-20;??
  • ?????????break;??
  • ?????case?kMovingDirBottom:??
  • ???????????rect.origin.y?=?rect.origin.y+20;??
  • ?????????break;??
  • ?????case?KMovingDirLieft:??
  • ???????????rect.origin.x?=?rect.origin.x-20;??
  • ????????break;??
  • ?????case?kMovingDirRight:??
  • ??????????rect.origin.x?=?rect.origin.x+20;??
  • ?????????break;??
  • ??
  • ?????default:??
  • ?????????break;??
  • };??
  • ??
  • elf.headImageView.frame=rect;??


  • 放大,縮小,旋轉控件(3種方式)

    [objc]?view plaincopy
  • typedef?enum{??
  • ????kAdd=5,??
  • ????KRemore,??
  • ????kRotateLeft,??
  • ????kRotatelRight,??
  • }kTranform;??

  • ?1.transform方式,放大,縮小,旋轉控件 (最常用)

    [objc]?view plaincopy
  • /*?會以中心點來放大,縮小,旋轉控件?*/??
  • switch?(btn.tag)?{??
  • ????case?kAdd:??
  • ????????//?改變控件的大小??
  • ????????self.headImageView.transform?=?CGAffineTransformScale(self.headImageView.transform,?1.2,?1.2);??
  • ????????break;??
  • ????case?KRemore:??
  • ????????self.headImageView.transform?=?CGAffineTransformScale(self.headImageView.transform,?0.8,?0.8);??
  • ????????break;??
  • ????case?kRotateLeft:??
  • ????????//?在OC中,所有跟角度相關的數值,都是弧度值,180°?=?M_PI??
  • ????????//?正數表示順時針旋轉??
  • ????????//?負數表示逆時針旋轉??
  • ????????self.headImageView.transform?=?CGAffineTransformRotate(self.headImageView.transform,?-M_PI_4);??
  • ????????break;??
  • ????case?kRotatelRight:??
  • ????????self.headImageView.transform?=?CGAffineTransformRotate(self.headImageView.transform,?M_PI_4);??
  • ????????break;??
  • ??????????
  • ????default:??
  • ????????break;??
  • };??

  • 2. ?bounds方式,放大,縮小

    [objc]?view plaincopy
  • /*?會以控件頂點來放大,縮小,然后計算出frame的x,y后再移動回去。啟用動畫效果時,一瞬間放大,然后移動到計算出的frame的x,y位置?*/??
  • ???CGRect?rect?=?self.headImageView.bounds;??
  • ??
  • ????switch?(btn.tag)?{??
  • ??
  • ????????case?kAdd:??
  • ????????????rect.size.width?+=?20;??
  • ????????????rect.size.height?+=?20;??
  • ????????????break;??
  • ????????case?KRemore:??
  • ????????????rect.size.width?-=?20;??
  • ????????????rect.size.height?-=?20;??
  • ????????????break;??
  • ??????????????
  • ????????default:??
  • ????????????break;??
  • ????};??
  • ??????
  • ????self.headImageView.bounds?=?rect;??

  • 3.2. ?frame方式,放大,縮小

    [objc]?view plaincopy
  • /*?會以控件頂點來放大,縮小*/??
  • ????CGRect?rect?=?self.headImageView.frame;??
  • ??
  • ????switch?(btn.tag)?{??
  • ??
  • ????????case?kAdd:??
  • ????????????rect.size.width?+=?20;??
  • ????????????rect.size.height?+=?20;??
  • ????????????break;??
  • ????????case?KRemore:??
  • ????????????rect.size.width?-=?20;??
  • ????????????rect.size.height?-=?20;??
  • ????????????break;??
  • ??????????????
  • ????????default:??
  • ????????????break;??
  • ????};??
  • ??????
  • ????self.headImageView.frane?=?rect;??


  • 總結:
    通過以下屬性可以修改控件的位置
    frame.origin
    center


    通過以下屬性可以修改控件的尺寸
    frame.size
    bounds.size


    利用transform屬性可以修改控件的位移(位置)、縮放、旋轉

    總結

    以上是生活随笔為你收集整理的IOS代码添加控件,控件移动,放大,缩小,旋转的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。