[iOS開發專案-3] 按鈕控制元件的移動,放大縮小,左右旋轉操作
阿新 • • 發佈:2019-01-22
本專案是取自傳智播客的教學專案,加入筆者的修改和潤飾。
1. 專案名稱:按鈕操作
2. 專案截圖展示
3. 專案功能
- 點選按鈕,切換按鈕狀態
- 上下左右移動按鈕
- 放大,縮小按鈕
- 左右旋轉按鈕
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. 筆記
- 若要實現某功能,先寫出最後功能實現的語句,然後再尋找所需的引數
- 如果介面上的控制元件是固定的,則最好使用拖動控制元件的方式而不是純程式碼建立的方式。