1. 程式人生 > >[iOS開發專案-3] 按鈕控制元件的移動,放大縮小,左右旋轉操作

[iOS開發專案-3] 按鈕控制元件的移動,放大縮小,左右旋轉操作

本專案是取自傳智播客的教學專案,加入筆者的修改和潤飾。

1. 專案名稱:按鈕操作

2. 專案截圖展示

這裡寫圖片描述

3. 專案功能

  1. 點選按鈕,切換按鈕狀態
  2. 上下左右移動按鈕
  3. 放大,縮小按鈕
  4. 左右旋轉按鈕

4. 專案程式碼


#import "ViewController.h"

//設定按鈕移動速度
#define KMovingDelta 20

//設定按鈕標籤列舉值
typedef enum{

    kMovingDirTop = 10,
    kMovingDirBottom,
    kMovingDirLeft,
    kMovingDirRight,

} kMovingDir;



@interface
ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *iconButton; @end @implementation ViewController //載入完成被呼叫 - (void) viewDidLoad{ //呼叫父類的實現方法 [super viewDidLoad]; UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(110, 100, 100, 100)]; self.iconButton = btn; btn.backgroundColor
= [UIColor redColor]; //將按鈕新增到檢視 [self.view addSubview:btn]; //設定背景圖片 [btn setBackgroundImage:[UIImage imageNamed:@"btn_01"] forState:UIControlStateNormal];//預設狀態 [btn setBackgroundImage:[UIImage imageNamed:@"btn_02"] forState:UIControlStateHighlighted];//被點選之後的狀態 //設定按鈕文字 [btn setTitle:@"請點選我"
forState:UIControlStateNormal]; [btn setTitle:@"點我幹嘛" forState:UIControlStateHighlighted]; //設定文字顏色 [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; [btn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted]; //設定文字垂直對齊方式 btn.contentVerticalAlignment = UIControlContentVerticalAlignmentBottom; } #pragma mark - 操作 //按鈕的移動 - (IBAction)move:(UIButton *)button { //根據的按鈕的tag判斷移動的方向,然後再修改結構體的成員 CGFloat dx= 0, dy = 0; //四個按鈕都能觸發這個方法:區分按鈕:用傳來的Button按鈕的tag區分 //上下移動的情況: if (button.tag == kMovingDirTop || button.tag == kMovingDirBottom) { dy = (button.tag==kMovingDirTop ? -KMovingDelta : KMovingDelta); } //左右移動的情況: if (button.tag == kMovingDirLeft || button.tag == kMovingDirRight) { dx = (button.tag==kMovingDirLeft ? -KMovingDelta : KMovingDelta); } //CGAffineTransformTranslate的位移行遍是對上次形變對累加 self.iconButton.transform = CGAffineTransformTranslate(self.iconButton.transform, dx, dy); } //按鈕的放大縮小 - (IBAction)zoom:(UIButton *)button { //增大的button的tag是1,縮小的button的tag是0 CGFloat scale = (button.tag)? 1.2 : 0.8; self.iconButton.transform = CGAffineTransformScale(self.iconButton.transform, scale,scale); } //按鈕的旋轉 - (IBAction)rotate:(UIButton *)button { [UIView beginAnimations:nil context:nil]; //180度=pi CGFloat angle =(button.tag) ? -M_PI_4 : M_PI_4; self.iconButton.transform = CGAffineTransformRotate(self.iconButton.transform, angle); [UIView commitAnimations]; } @end

5. 本專案必須掌握的程式碼段

  • 點選上下左右都能觸發同一個方法,按鈕的標籤來區分到底是哪個按鈕觸發了這個方法
- (IBAction)move:(UIButton *)button {

    CGFloat dx= 0, dy = 0;

    if (button.tag == kMovingDirTop || button.tag == kMovingDirBottom) {
        dy = (button.tag==kMovingDirTop ? -KMovingDelta : KMovingDelta);
    }

    if (button.tag == kMovingDirLeft || button.tag == kMovingDirRight) {
        dx = (button.tag==kMovingDirLeft ? -KMovingDelta : KMovingDelta);
    }

    self.iconButton.transform  = CGAffineTransformTranslate(self.iconButton.transform, dx, dy);  
}

- 判斷語句

  • 判斷加賦值語句
CGFloat scale = (button.tag)? 1.2 : 0.8;

6. 筆記

  • 若要實現某功能,先寫出最後功能實現的語句,然後再尋找所需的引數
  • 如果介面上的控制元件是固定的,則最好使用拖動控制元件的方式而不是純程式碼建立的方式。