2015年06月30日第一天筆記

一、按鈕的基本使用
frame 相當於父控件的左上角

需求:上下左右移動帶背景圖片的按鈕,增大和見下帶背景圖片的按鈕

分析
1)要定義一個按鈕
2)定義上下左右 用frame.origin.x/y,變大,變小的方法frame.size.height/width

知識

定義按鈕
1)連線屬性 IBOutlet 2)按鈕類名 UIButton
定義方法
1)方法類型 IBAction
方法實現
1)利用按鈕的frame屬性,frame 是CGRect 類型的
由CGPoint的origin和CGSize的size
2)不能直接給對象點出的的結構體屬性的成員賦值
3)可以給獨立的結構體屬性成員賦值

所以,若要通過frame屬性來移動button

1)創建一個CGRect的類型來保存獲取到按鈕frame
2)對這個新創建的類型變量賦值
3)將這個類型變量再次賦給按鈕frame屬性

二、知識重點

UIView的常見屬性
@property(nonatomic,readonly) UIView *superview;
獲得自己的父控件對象

@property(nonatomic,readonly,copy) NSArray *subviews;
獲得自己的所有子控件對象

@property(nonatomic) NSInteger tag;
控件的ID\標識,父控件可以通過tag來找到對應的子控件

@property(nonatomic) CGAffineTransform transform;
控件的形變屬性(可以設置旋轉角度、比例縮放、平移等屬性)

UIView的常見屬性
@property(nonatomic) CGRect frame;(縮放,位置移動)
控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角爲座標原點)

@property(nonatomic) CGRect bounds;(縮放)
控件所在矩形框的位置和尺寸(以自己左上角爲座標原點,所以bounds的x\y一般爲0)

@property(nonatomic) CGPoint center;(位置移動)
控件中點的位置(以父控件的左上角爲座標原點)
UIKit座標系
在UIKit中,座標系的原點(0,0)在左上角,x值向右正向延伸,y值向下正向延伸

UIView的常見方法
- (void)addSubview:(UIView *)view;
添加一個子控件view

  • (void)removeFromSuperview;
    從父控件中移除

  • (UIView *)viewWithTag:(NSInteger)tag;
    根據一個tag標識找出對應的控件(一般都是子控件)

三、要掌握的

1)使用代碼創建、添加控件

2)分別通過 storyboard 和 代碼 設置按鈕在不同狀態的背景、文字、文字顏色

3)分別通過 storyboard 和 代碼 監聽按鈕點擊

4)修改控件的位置和尺寸

5)製作簡單的動畫效果

6)掌握frame、center、bounds、transform的使用

四、方法提取·左移定義的值

背景:利用frame完成按鈕移動

特別之處:一個方法A控制上下左右移動,然後用不同方向的監聽事件調用這個方法

問題:讓這個方法A知道具體方向

解決:不同事件方法向這個方法A傳入一個方向枚舉類型用來判斷

實施:定義個枚舉類型

高明之處1:完成左上移動

改動之處:對枚舉元素用左移定義的值,

typedef enum {
HMDirectionLeft = 1 << 0, // 0001
HMDirectionRight = 1 << 1, // 0010
HMDirectionUp = 1 << 2, // 0100
HMDirectionDown = 1 << 3 // 1000
} HMDirection;

然後在事件方法中 “左和上或一下”

[self moving:HMDirectionLeft|HMDirectionUp];

最後在方法A中判斷的時候用 “或後的值與&每一個方向” 再進行處理移動

if (direction & HMDirectionLeft)
有效
if (direction & HMDirectionUp)
有效

if (direction & HMDirectionDown)
無效
if (direction & HMDirectionRight)
無效

原理:A|B&X=A|B(當X=A和X=B)

高明之處2:不同方向的監聽事件合併爲一個

問題:讓這個方法A知道具體方向,但是現在只有一個方法

解決:設置每一個方向按鈕的tag屬性,讓每個按鈕鏈接該事件方法

原理:當點擊某個按鈕是,系統會把該觸發按鈕傳入該事件方法,當然這個事件方法得按鈕類型的參數用來接收到它,這樣就可以得到當前按鈕,即得到當前按鈕的tag值,而tag值又可以枚舉類型相同

實施:如上(改動之處)

注意:
1)用frame改變大小,要把Xcode裏的 工具1面板的 Use Auto layout 勾選取消,否則失效
2)用bounds的位置一般爲0,因爲它始終以自己的左上角爲座標原點,所以用它來縮放控件

五、動畫設置放在位置數據修改之後,重置位置之前

1)首尾式動畫
// 1.開啓動畫
[UIView beginAnimations:nil context:nil];
// 2.設置執行動畫的時間 (單位s)
[UIView setAnimationDuration:1];

// 修改頭像center屬性
self.headBtn.center = center;

// 提交動畫
[UIView commitAnimations];

2)用block

// animate 動畫 Duration 動畫持續時間(s)
// 當遇到方法中需要使用block時候,直接敲一個回車(enter)
[UIView animateWithDuration:1 animations:^{
// 需要執行動畫的代碼
self.headBtn.center = center;
}];

2015年07月02日18:39:09
老師講的QQ登錄
1.QQ登陸思路
1.搭建界面
2.監聽按鈕的點擊
1.監聽按鈕的點擊事件方法有三種形式
1.不帶參數
2.帶一個參數,這個參數只能是觸發這個事件的哪個控件(按鈕)
3,帶兩個參數,第一個是觸發這個事件的哪個控件,第二參數就是事件.
3.連線導致兩個錯誤
1.連線後修改方法名稱沒有刪除之前連線-> 找不方法的錯誤
2.連線後,修改屬性名稱,而沒有刪除之前的連線->setValue:forUndefinedKey

4.彈窗的兩種方法
//第一種方式
// 在iOS9中被廢棄
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@”提示” message:@”QQ不能爲空!” delegate:nil cancelButtonTitle:@”確定” otherButtonTitles: nil];
// 讓alertView顯示出來
[alertView show];
//第二種方式:iOS8新增的
// 創建彈窗的控制器
UIAlertController *ac = [UIAlertController alertControllerWithTitle:@”提示” message:@”密碼不能爲空” preferredStyle:UIAlertControllerStyleAlert];
// 創建彈窗執行的行爲
UIAlertAction *action = [UIAlertAction actionWithTitle:@”確定” style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
// 點擊按鈕之後做事情的代碼
NSLog(@”come here”);
}];
// 把行爲添加到彈窗控制器上(彈窗會多出一個按鈕)
[ac addAction:action];

// present 展示
[self presentViewController:ac animated:YES completion:nil];

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章