標籤:
一、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視圖與組件控制項