iOS開發UI基礎—手寫控件,frame,center和bounds屬性 – iPhone手機開發技術文章 iPhone軟體開發教學課程

一、手寫控件

 

1.手寫控件的步驟

(1)使用相應的空間類創建控件對象

(2)設置該控件的各種屬性

(3)添加控件到視圖中

(4)如果是button等控件,還需考慮控件的單擊事件等

(5)註意:View Contollor和view的關系

2.註意點

在OC開發中,Storyboard中的所有操作都可以通過代碼實現,程序員一定要熟練掌握代碼佈局界面的能力!

 

設置控件監聽方法的示例代碼如下:

 

[btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];

 

提示:

 

1> addTarget方法定義在UIControl類中,這意味著可以給所有繼承自UIControl類的對象添加監聽方法

 

2> 監聽方法的第一個參數就是對象本身

 

3> 監聽方法的第二個參數是監聽控件的事件

 

3.代碼示例

 

復制代碼

 1     //1.使用類創建一個按鈕對象

 2    // UIButton *headbtn=[[UIButton alloc] initWithFrame:CGRectMake(100 ,100, 100, 100)];

 3     //設置按鈕對象為自定義型

 4     UIButton *headbtn=[UIButton buttonWithType:UIButtonTypeCustom];

 5     

 6     //2.設置對象的各項屬性

 7     //(1)位置等通用屬性設置

 8     headbtn.frame=CGRectMake(100, 100, 100, 100);

 9     

10     //(2)設置普通狀態下按鈕的屬性

11     [headbtn setBackgroundImage:[UIImage imageNamed:@"i"] forState:UIControlStateNormal];

12     [headbtn setTitle:@"點我!" forState:UIControlStateNormal];

13     [headbtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

14     

15     //(3)設置高亮狀態下按鈕的屬性

16     [headbtn setBackgroundImage:[UIImage imageNamed:@"a"] forState:UIControlStateHighlighted];

17     [headbtn setTitle:@"還行吧~" forState:UIControlStateHighlighted];

18     [headbtn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];

19     

20     //3.把對象添加到視圖中展現出來

21     [self.view addSubview:headbtn];

22     //註意點!

23     self.headImageView=headbtn;

復制代碼

二、frame,center和bounds屬性

 

1.frame、center和bounds屬性

frame:控制位置和大小

center:控制位置(中心點)

bounds:控制大小(以自己的左上角為原點)

2.註意點

(1)通過以下屬性可以修改控件的位置

 

frame.origin

 

center

 

(2)通過以下屬性可以修改控件的尺寸

 

frame.size

 

bounds.size

 

3.代碼示例

 

一個控制圖片上下左右平移,縮放的程序(frame、center和bounds屬性)

 

復制代碼

  1 //

  2 //  YYViewController.m

  3 //  01-練習使用按鈕的frame和center屬性

  4 //

  5 //  Created by apple on 14-5-21.

  6 //  Copyright (c) 2014年 itcase. All rights reserved.

  7 //

  8 

  9 #import "YYViewController.h"

 10 

 11 //私有擴展

 12 @interface YYViewController ()

 13 

 14 @property(nonatomic,weak)IBOutlet UIButton *headImageView;

 15 @end

 16 

 17 @implementation YYViewController

 18 

 19 //枚舉類型,從1開始

 20 typedef enum

 21 {

 22     ktopbtntag=1,

 23     kdownbtntag,

 24     krightbtntag,

 25     kleftbtntag

 26 }btntag;

 27 

 28 //viewDidLoad是視圖加載完成後調用的方法,通常在此方法中執行視圖控制器的初始化工作

 29 – (void)viewDidLoad

 30 {

 31     

 32     //在viewDidLoad方法中,不要忘記調用父類的方法實現

 33     [super viewDidLoad];

 34 

 35     

 36     //手寫控件代碼

 37     //一、寫一個按鈕控件,上面有一張圖片

 38     

 39     //1.使用類創建一個按鈕對象

 40    // UIButton *headbtn=[[UIButton alloc] initWithFrame:CGRectMake(100 ,100, 100, 100)];

 41     //設置按鈕對象為自定義型

 42     UIButton *headbtn=[UIButton buttonWithType:UIButtonTypeCustom];

 43     

 44     //2.設置對象的各項屬性

 45     //(1)位置等通用屬性設置

 46     headbtn.frame=CGRectMake(100, 100, 100, 100);

 47     

 48     //(2)設置普通狀態下按鈕的屬性

 49     [headbtn setBackgroundImage:[UIImage imageNamed:@"i"] forState:UIControlStateNormal];

 50     [headbtn setTitle:@"點我!" forState:UIControlStateNormal];

 51     [headbtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

 52     

 53     //(3)設置高亮狀態下按鈕的屬性

 54     [headbtn setBackgroundImage:[UIImage imageNamed:@"a"] forState:UIControlStateHighlighted];

 55     [headbtn setTitle:@"還行吧~" forState:UIControlStateHighlighted];

 56     [headbtn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];

 57     

 58     //3.把對象添加到視圖中展現出來

 59     [self.view addSubview:headbtn];

 60     //註意點!

 61     self.headImageView=headbtn;

 62 

 63     

 64     //二、寫四個控制圖片左右上下移動方向的按鈕控件

 65     

 66     /**================向上的按鈕=====================*/

 67     //1.創建按鈕對象

 68     UIButton *topbtn=[UIButton buttonWithType:UIButtonTypeCustom];

 69     

 70     //2.設置對象的屬性

 71     topbtn.frame=CGRectMake(100, 250, 40, 40);

 72     [topbtn setBackgroundImage:[UIImage imageNamed:@"top_normal"] forState:UIControlStateNormal];

 73     [topbtn setBackgroundImage:[UIImage imageNamed:@"top_highlighted"] forState:UIControlStateHighlighted];

 74     [topbtn setTag:1];

 75     //3.把控件添加到視圖中

 76     [self.view addSubview:topbtn];

 77     

 78     //4.按鈕的單擊控制事件

 79     [topbtn addTarget:self action:@selector(Click:) forControlEvents:UIControlEventTouchUpInside];

 80     

 81     

 82       /**================向下的按鈕=====================*/

 83     //1.創建按鈕對象

 84     UIButton *downbtn=[UIButton buttonWithType:UIButtonTypeCustom];

 85     //2.設置對象的屬性

 86     downbtn.frame=CGRectMake(100, 350, 40, 40);

 87     [downbtn setBackgroundImage:[UIImage imageNamed:@"bottom_normal"] forState:UIControlStateNormal];

 88     [downbtn setBackgroundImage:[UIImage imageNamed:@"bottom_highlighted"] forState:UIControlStateHighlighted];

 89     [downbtn setTag:2];

 90     //3.把控件添加到視圖中

 91     [self.view addSubview:downbtn];

 92     

 93     //4.按鈕的單擊控制事件

 94     [downbtn addTarget:self action:@selector(Click:) forControlEvents:UIControlEventTouchUpInside];

 95 

 96     

 97      /**================向左的按鈕=====================*/

 98     //1.創建按鈕對象

 99     UIButton *leftbtn=[UIButton buttonWithType:UIButtonTypeCustom];

100     //2.設置對象的屬性

101     leftbtn.frame=CGRectMake(50, 300, 40, 40);

102     [leftbtn setBackgroundImage:[UIImage imageNamed:@"left_normal"] forState:UIControlStateNormal];

103     [leftbtn setBackgroundImage:[UIImage imageNamed:@"left_highlighted"] forState:UIControlStateHighlighted];

104     [leftbtn setTag:4];

105     //3.把控件添加到視圖中

106     [self.view addSubview:leftbtn];

107     

108     //4.按鈕的單擊控制事件

109     [leftbtn addTarget:self action:@selector(Click:) forControlEvents:UIControlEventTouchUpInside];

110     

111     

112     

113     /**================向右的按鈕=====================*/

114     //1.創建按鈕對象

115     UIButton *rightbtn=[UIButton buttonWithType:UIButtonTypeCustom];

116     //2.設置對象的屬性

117     rightbtn.frame=CGRectMake(150, 300, 40, 40);

118     [rightbtn setBackgroundImage:[UIImage imageNamed:@"right_normal"] forState:UIControlStateNormal];

119     [rightbtn setBackgroundImage:[UIImage imageNamed:@"right_highlighted"] forState:UIControlStateHighlighted];

120     [rightbtn setTag:3];

121     //3.把控件添加到視圖中

122     [self.view addSubview:rightbtn];

123     

124     //4.按鈕的單擊控制事件

125     [rightbtn addTarget:self action:@selector(Click:) forControlEvents:UIControlEventTouchUpInside];

126     

127       //三、寫兩個縮放按鈕

128        /**================放大的按鈕=====================*/

129     //1.創建對象

130     UIButton *plusbtn=[UIButton buttonWithType:UIButtonTypeCustom];

131     //2.設置屬性

132     plusbtn.frame=CGRectMake(75, 400, 40, 40);

133     [plusbtn setBackgroundImage:[UIImage imageNamed:@"plus_normal"] forState:UIControlStateNormal];

134     [plusbtn setBackgroundImage:[UIImage imageNamed:@"plus_highlighted"] forState:UIControlStateHighlighted];

135     [plusbtn setTag:1];

136     //3.添加到視圖

137     [self.view addSubview:plusbtn];

138     //4.單擊事件

139     [plusbtn addTarget:self action:@selector(Zoom:) forControlEvents:UIControlEventTouchUpInside];

140     

141     

142     /**================縮小的按鈕=====================*/

143     UIButton *minusbtn=[UIButton buttonWithType:UIButtonTypeCustom];

144     minusbtn.frame=CGRectMake(125, 400, 40, 40);

145     [minusbtn setBackgroundImage:[UIImage imageNamed:@"minus_normal"] forState:UIControlStateNormal];

146     [minusbtn setBackgroundImage:[UIImage imageNamed:@"minus_highlighted"] forState:UIControlStateHighlighted];

147     [minusbtn setTag:0];

148     [self.view addSubview:minusbtn];

149     [minusbtn addTarget:self action:@selector(Zoom:) forControlEvents:UIControlEventTouchUpInside];

150 }

151 

152 //控制方向的多個按鈕調用同一個方法

153 -(void)Click:(UIButton *)button

154 {

155 

156     //練習使用frame屬性

157     //CGRect frame=self.headImageView.frame;

158     

159     /**註意,這裡如果控制位置的兩個屬性frame和center同時使用的話,會出現很好玩的效果,註意分析*/

160     //練習使用center屬性

161     CGPoint center=self.headImageView.center;

162     switch (button.tag) {

163         case ktopbtntag:

164             center.y-=30;

165             break;

166         case kdownbtntag:

167             center.y+=30;

168             break;

169         case kleftbtntag:

170             //發現一個bug,之前的問題是因為少寫瞭break,造成瞭它們的順序執行,sorry

171            //center.x=center.x-30;

172             center.x-=50;

173             break;

174         case krightbtntag:

175             center.x+=50;

176             break;

177     }

178     

179  //  self.headImageView.frame=frame;

180     

181     //首尾式設置動畫效果

182     [UIView beginAnimations:nil context:nil];

183     self.headImageView.center=center;

184     //設置時間

185     [UIView setAnimationDuration:2.0];

186     [UIView commitAnimations];

187     NSLog(@"移動!");

188     

189 }

190 -(void)Zoom:(UIButton *)btn

191 {

192     //使用frame,以自己的左上角(自己的原點)為原點

193 //    CGRect frame=self.headImageView.frame;

194 //    if (btn.tag) {

195 //        frame.size.height+=30;

196 //        frame.size.width+=30;

197 //    }

198 //    else

199 //    {

200 //        frame.size.width-=50;

201 //        frame.size.height-=50;

202 //    }

203 //    self.headImageView.frame=frame;

204     

205     

206     //使用bounds,以中心點位原點進行縮放

207     CGRect bounds = self.headImageView.bounds;

208     if (btn.tag) {

209         bounds.size.height+=30;

210         bounds.size.width+=30;

211     }

212     else

213     {

214         bounds.size.height-=50;

215         bounds.size.width-=50;

216     }

217     

218     //設置首尾動畫

219     [UIView beginAnimations:nil context:nil];

220     self.headImageView.bounds=bounds;

221     [UIView setAnimationDuration:2.0];

222     [UIView commitAnimations];

223 }

224 @end

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *