iOS開發基礎篇-手寫控件

1、手寫控件的步驟

  1)使用相應的控件類建立控件對象;html

  2)設置該控件的各類屬性;ide

  3)添加空間到視圖中;動畫

  4)若是是 UIButton 等控件,還需考慮控件的單擊事件等;atom

 

2、添加 UIButton 單擊事件

   [topbtn addTarget:self action:@selector(move:) forControlEvents:UIControlEventTouchUpInside]; spa

  1) addTarget:forControlEvents: 方法定義在 UIControl 類中,意味着全部繼承自 UIControl 類的對象都可添加;3d

  2)第一個參數爲對象自己;code

  3)第二個參數爲監聽控件的事件。orm

1 @interface ViewController ()
2 @property (nonatomic, weak) IBOutlet UIButton *headImageView;  //被控制用於移動的按鈕 3 @end

 

 //手工添加上下左右、放大縮小按鈕
1
- (void)viewDidLoad { 2 [super viewDidLoad]; 3 //設置按鈕對象爲自定義型 4 UIButton *headbtn = [UIButton buttonWithType:UIButtonTypeCustom]; 5 //設置按鈕對象普通狀態下的各項屬性 6 headbtn.frame = CGRectMake(100, 100, 100, 100); 7 [headbtn setBackgroundImage:[UIImage imageNamed:@"beauty10"] forState:UIControlStateNormal]; 8 [headbtn setTitle:@"點我!" forState:UIControlStateNormal]; 9 [headbtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 10 //設置按鈕對象高亮狀態下的屬性 11 [headbtn setBackgroundImage:[UIImage imageNamed:@"beauty11"] forState:UIControlStateHighlighted]; 12 [headbtn setTitle:@"還行吧~~" forState:UIControlStateHighlighted]; 13 [headbtn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted]; 14 //將按鈕對象添加到視圖中顯示出來 15 [self.view addSubview:headbtn]; 16 self.headImageView = headbtn;  //創建IBOutlet鏈接 17 18 //向上移動的按鈕 19 UIButton *topbtn = [UIButton buttonWithType:UIButtonTypeCustom]; 20 topbtn.frame = CGRectMake(100, 250, 40, 40); 21 [topbtn setTitle:@"上移" forState:UIControlStateNormal]; 22 [topbtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; 23 [topbtn setTag:1]; 24 [self.view addSubview:topbtn]; 25 //添加按鈕的單擊事件 26 [topbtn addTarget:self action:@selector(move:) forControlEvents:UIControlEventTouchUpInside]; 27 28 //向下移動的按鈕 29 UIButton *downbtn = [UIButton buttonWithType:UIButtonTypeCustom]; 30 downbtn.frame = CGRectMake(100, 350, 40, 40); 31 [downbtn setTitle:@"下移" forState:UIControlStateNormal]; 32 [downbtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; 33 [downbtn setTag:2]; 34 [self.view addSubview:downbtn]; 35 //添加按鈕的單擊事件 36 [downbtn addTarget:self action:@selector(move:) forControlEvents:UIControlEventTouchUpInside]; 37 38 //向左移動的按鈕 39 UIButton *leftbtn = [UIButton buttonWithType:UIButtonTypeCustom]; 40 leftbtn.frame = CGRectMake(50, 300, 40, 40); 41 [leftbtn setTitle:@"左移" forState:UIControlStateNormal]; 42 [leftbtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; 43 [leftbtn setTag:3]; 44 [self.view addSubview:leftbtn]; 45 //添加按鈕的單擊事件 46 [leftbtn addTarget:self action:@selector(move:) forControlEvents:UIControlEventTouchUpInside]; 47 48 //向右移動的按鈕 49 UIButton *rightbtn = [UIButton buttonWithType:UIButtonTypeCustom]; 50 rightbtn.frame = CGRectMake(150, 300, 40, 40); 51 [rightbtn setTitle:@"右移" forState:UIControlStateNormal]; 52 [rightbtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; 53 [rightbtn setTag:4]; 54 [self.view addSubview:rightbtn]; 55 //添加按鈕的單擊事件 56 [rightbtn addTarget:self action:@selector(move:) forControlEvents:UIControlEventTouchUpInside]; 57 58 //放大的按鈕 59 UIButton *zoombtn = [UIButton buttonWithType:UIButtonTypeCustom]; 60 zoombtn.frame = CGRectMake(75, 400, 40, 40); 61 [zoombtn setTitle:@"放大" forState:UIControlStateNormal]; 62 [zoombtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; 63 [zoombtn setTag:0]; 64 [self.view addSubview:zoombtn]; 65 //添加按鈕的單擊事件 66 [zoombtn addTarget:self action:@selector(zoom:) forControlEvents:UIControlEventTouchUpInside]; 67 68 //縮小的按鈕 69 UIButton *minusbtn = [UIButton buttonWithType:UIButtonTypeCustom]; 70 minusbtn.frame = CGRectMake(125, 400, 40, 40); 71 [minusbtn setTitle:@"縮小" forState:UIControlStateNormal]; 72 [minusbtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; 73 [minusbtn setTag:1]; 74 [self.view addSubview:minusbtn]; 75 //添加按鈕的單擊事件 76 [minusbtn addTarget:self action:@selector(zoom:) forControlEvents:UIControlEventTouchUpInside]; 77 }

  先聲明上下左右移動的枚舉類型,及移動或放大縮小的常量值:htm

 1 //ViewController.m
 2 typedef NS_ENUM(NSUInteger, kMovingDir)
 3 {
 4     kMovingDirTop = 1,
 5     kMovingDirButtom,
 6     kMovingDirLeft,
 7     kMovingDirRight,
 8 };
 9 
10 CGFloat const kMovingDelta = 50.0;      //移動係數
11 CGFloat const kZoomingDelta = 50.0;     //放大縮小系數

  實現按鈕的事件:對象

 1 - (void)move:(id)sender {
 2     UIButton *button = (UIButton *)sender;
 3     
 4     CGPoint p = self.headImageView.center;
 5     switch (button.tag) {
 6         case kMovingDirTop: p.y -= kMovingDelta; break;  //往上移動
 7         case kMovingDirButtom: p.y += kMovingDelta; break;  //往下移動
 8         case kMovingDirLeft: p.x -= kMovingDelta; break; //往左移動
 9         case kMovingDirRight: p.x += kMovingDelta; break; //往右移動
10     }
11     
12     [UIView beginAnimations:nil context:nil];
13     [UIView setAnimationDuration:2.0];
14     self.headImageView.center = p;
15     [UIView commitAnimations];
16 }
17 
18 - (void)zoom:(id)sender {
19     UIButton *button = (UIButton *)sender;
20     
21     CGRect rect = self.headImageView.bounds;
22     if (button.tag) {   //縮小
23         rect.size.width -= kZoomingDelta;
24         rect.size.height -= kZoomingDelta;
25     } else {            //放大
26         rect.size.width += kZoomingDelta;
27         rect.size.height += kZoomingDelta;
28     }
29     
30     [UIView beginAnimations:nil context:nil];
31     [UIView setAnimationDuration:2.0];
32     self.headImageView.bounds = rect;
33     [UIView commitAnimations];
34 }

示圖以下:

示例代碼:http://pan.baidu.com/s/1i3SainN

3、簡單的動畫

  1)開始動畫;

  2)設置動畫相關的參數,如時間等;

  3)參與動畫的行動

  4)提交動畫。

示例代碼以下:

1     [UIView beginAnimations:nil context:nil];
2     [UIView setAnimationDuration:2.0];
3     self.headImageView.bounds = rect;
4     [UIView commitAnimations];

 

參考博客:iOS開發UI基礎—手寫控件,frame,center和bounds屬性

相關文章
相關標籤/搜索