[iOS开发项目-3] 按钮控件的移动,放大缩小,左右旋转操作

本项目是取自传智播客的教学项目,加入笔者的修改和润饰。

1. 项目名称:按钮操作

2. 项目截图展示

[iOS开发项目-3] 按钮控件的移动,放大缩小,左右旋转操作_第1张图片

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. 笔记

  • 若要实现某功能,先写出最后功能实现的语句,然后再寻找所需的参数
  • 如果界面上的控件是固定的,则最好使用拖动控件的方式而不是纯代码创建的方式。

你可能感兴趣的:(iOS,开发)