Objective-c:UIView視圖與組件控制項

來源:互聯網
上載者:User

標籤:

一、UIView常見屬性 (1)@property(nonatomic,readonly)UIView *superview; //擷取自己的父控制項對象 (2)@property(nonatomic,readonly,copy)UIView *subviews;//擷取自己的所有子控制項對象 (3)@property(nonatomic)NSInteger tag;//控制項的ID標識,父控制項可以通過tag來找到對應的子控制項,預設為0  (4)@property(nonatomic) CGRect frame;//控制項所在矩形框的位置和尺寸(以父控制項的左上方為座標原點) (5)@property(nonatomic) CGRect bounds;//控制項所在矩形框的位置和尺寸(以自己左上方為座標原點,所    以bounds的x\y永遠為0) (6)@property(nonatomic) CGPoint center;//控制項中點的位置(以父控制項的左上方為座標原點) (7)@property(nonatomic) CGAffineTransform transform;//控制項的形變屬性(可以設定旋轉角度、比例縮放、平移等屬性) a.旋轉:CGAffineTransform CGAffineTransformScale(CGAffineTransform t,  CGFloat sx, CGFloat sy)  sx和sy為座標放縮倍數 b.放縮:CGAffineTransform CGAffineTransformRotate(CGAffineTransform t,CGFloat angle)  angle:旋轉度數 c.反轉:CGAffineTransform CGAffineTransformInvert(CGAffineTransform t)         d. 兩個矩陣仿射為一個新的矩陣:             CGAffineTransform  CGAffineTransformConcat(CGAffineTransform t1,CGAffineTransform t2)  e.判斷兩個矩陣是否相等:      bool CGAffineTransformEqualToTransform(CGAffineTransform t1, CGAffineTransform t2) 

建立一個仿射矩陣

  • CGAffineTransformMake 直接賦值來建立
  • CGAffineTransformMakeRotation 設定角度來產生矩陣
  • 結果就是
  • CGAffineTransformMakeScale  設定縮放,及改變a、d的值
  • CGAffineTransformMakeTranslation  設定位移

改變已經存在的放射矩陣

  • CGAffineTransformTranslate  原始的基礎上加上位移
  • CGAffineTransformScale加上縮放
  • CGAffineTransformRotate加上旋轉
  • CGAffineTransformInvert 反向的仿射矩陣比如(x,y)通過矩陣t得到了(x‘,y‘)那麼通過這個函數產生的t‘作用與(x‘,y‘)就能得到原始的(x,y)
  • CGAffineTransformConcat 通過兩個已經存在的放射矩陣產生一個新的矩陣t‘ = t1 * t2

應用仿射矩陣

  • CGPointApplyAffineTransform 得到新的點
  • CGSizeApplyAffineTransform  得到新的size
  • CGRectApplyAffineTransform  得到新的rect
  視圖view的元件圖表框frame的類型為CGRect結構體struct CGRect{ CGPoint origin; CGSize size;};struct CGPonit{ CGFloat x; CGFloat y;};struct CGSize{ CGFloat width; CGFloat height;}; 

視圖view的組件形變控制項transform的類型為CGAffineTransform結構體,就是一個矩陣(可以伸縮、平移、旋轉等)

struct CGAffineTransform {

  CGFloat a, b, c, d;

  CGFloat tx, ty;

};

二、UIButton的初始化 –最普通的初始化方法

UIButton *btn = [[UIButton alloc] initWithFrame:rect];

 –快速初始化

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

–type參數用來指定按鈕的類型,一共有6種選擇:•UIButtonTypeCustom:無類型,按鈕的內容需要自訂•UIButtonTypeRoundedRect:圓矩形邊框  •UIButtonTypeDetailDisclosure: •UIButtonTypeInfoLight: •UIButtonTypeInfoDark: •UIButtonTypeContactAdd:

    作品:boxMan

  1 #import "ViewController.h"  2 typedef enum  3 {  4     buttonTypeLeft=1,  5     buttonTypeRight,  6     buttonTypeUp,  7     buttonTypeDown,  8     buttonTypeRotateL,  9     buttonTypeRotateR, 10     buttonTypeScaleUp, 11     buttonTypeScaleDown, 12      13 }buttonType; 14 @interface ViewController () 15 @property (weak, nonatomic) IBOutlet UIView *viewMan; 16  17 @end 18  19 @implementation ViewController 20 //移動方向 21 - (IBAction)buttonDirectionClicked:(UIButton *)sender 22 { 23     //父視圖的長度和高度 24     NSInteger screenWidth = self.view.frame.size.width; 25     NSInteger screenHeight = self.view.frame.size.height; 26      27     //子視圖 28     CGRect rect = self.viewMan.frame; 29     //每次移動距離 30     NSInteger offset = 5; 31     //父控制項通過tag標識擷取視圖中子控制項(組件) 32     switch (sender.tag) 33     { 34         case buttonTypeDown: 35             rect.origin.y += offset; 36             if(rect.origin.y >= screenHeight) 37             { 38                 rect.origin.y = -rect.size.height; 39             } 40             break; 41         case buttonTypeUp: 42             rect.origin.y -= offset; 43             if(rect.origin.y <= -rect.size.height) 44             { 45                 rect.origin.y = screenHeight; 46             } 47             break; 48         case buttonTypeLeft: 49             rect.origin.x -= offset; 50             if(rect.origin.x <= -rect.size.width) 51             { 52                 rect.origin.x = screenWidth; 53             } 54             break; 55         case buttonTypeRight: 56             rect.origin.x += offset; 57             if(rect.origin.x >= screenWidth) 58             { 59                 rect.origin.x = -rect.size.width; 60             } 61             break; 62     } 63     self.viewMan.frame = rect; 64 } 65  66 //旋轉 67 - (IBAction)buttonRotateClicked:(UIButton *)sender 68 { 69     //子視圖這個控制項的座標矩陣 70     CGAffineTransform form =  self.viewMan.transform; 71     switch (sender.tag) { 72         case buttonTypeRotateL: 73             form = CGAffineTransformRotate(form, -M_2_PI/2); 74             break; 75         case buttonTypeRotateR: 76             form = CGAffineTransformRotate(form, M_2_PI/2); 77             break; 78     } 79     self.viewMan.transform = form; 80 } 81  82 //放縮 83 - (IBAction)buttonScaleClicked:(UIButton *)sender 84 { 85     //子視圖這個控制項的座標矩陣 86     CGAffineTransform form = self.viewMan.transform; 87     CGFloat scaleFator = 0.0f; 88      89     switch (sender.tag) { 90         case buttonTypeScaleUp: 91             scaleFator = 1.2; 92             break; 93         case buttonTypeScaleDown: 94             scaleFator = 0.8; 95             break; 96     } 97     form = CGAffineTransformScale(form, scaleFator, scaleFator); 98     self.viewMan.transform = form; 99 }100 101 - (void)viewDidLoad {102     [super viewDidLoad];103     // Do any additional setup after loading the view, typically from a nib.104 }105 106 - (void)didReceiveMemoryWarning {107     [super didReceiveMemoryWarning];108     // Dispose of any resources that can be recreated.109 }110 111 @end

 

Objective-c:UIView視圖與組件控制項

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.