iOS-UI基础-03按钮操作

本文介绍了一种在iOS应用中优化按钮移动方向的方法。通过使用枚举类型和宏定义来减少代码重复,并增强了代码的可读性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#import "HMViewController.h"

@interface HMViewController ()
@property (weak, nonatomic) IBOutlet UIButton *iconButton;
@end

@implementation HMViewController

/**
 1. 基本功能实现
 2. 对代码优化:
 尽量让重复的代码只出现一次
 */
/** 向上移动 */
- (IBAction)top
{
    // 修改位置可以通过frame
    // 在OC中,不允许直接修改"对象"的"结构体属性"的"成员"
    // 但是允许修改"结构体属性"的"成员"
    //    self.iconButton.frame.origin.y -= 20;
    // 如果要修改对象的结构体属性,需要三个步骤
    // 1. 取出frame
    CGRect frame = self.iconButton.frame;
    // 2. 修改结构体的成员
    frame.origin.y -= 20;
    // 3. 重新为对象的结构体属性赋值
    self.iconButton.frame = frame;
}

/** 向下移动 */
- (IBAction)bottom
{
    // 1. 取出frame
    CGRect frame = self.iconButton.frame;
    // 2. 修改结构体的成员
    frame.origin.y += 20;
    // 3. 重新为对象的结构体属性赋值
    self.iconButton.frame = frame;
}

/** 向左移动 */
- (IBAction)left
{
    // 1. 取出frame
    CGRect frame = self.iconButton.frame;
    // 2. 修改结构体的成员
    frame.origin.x -= 20;
    // 3. 重新为对象的结构体属性赋值
    self.iconButton.frame = frame;
}

/** 向右移动 */
- (IBAction)right
{
    // 1. 取出frame
    CGRect frame = self.iconButton.frame;
    // 2. 修改结构体的成员
    frame.origin.x += 20;
    // 3. 重新为对象的结构体属性赋值
    self.iconButton.frame = frame;
}

@end



修改后:

#import "HMViewController.h"

// 枚举类型本质上就是整数,定义的时候,如果只指定了第一个数值,后续的数值会依次递增
// 枚举类型是解决魔法数字比较常用的手段
typedef enum {
    kMovingDirTop = 10,
    kMovingDirBottom,
    kMovingDirLeft,
    kMovingDirRight,
} kMovingDir;

#define kMovingDelta    20.0f

@interface HMViewController ()
@property (weak, nonatomic) IBOutlet UIButton *iconButton;
@end

@implementation HMViewController

/**
 让重复的代码只出现一次
 */
- (IBAction)move:(UIButton *)button
{
    // 1. 取出frame
    CGRect frame = self.iconButton.frame;
    
    // 2. 根据按钮的类型tag,判断移动的方向,再修改结构体的成员
    // magic number魔法数字 不知道意思的数字就是魔法数字,比如下面kMovingDirTop等替换为数字就让人费解,需要去猜测
    switch (button.tag) {//tag是标签的意思,表示这个事物的名字
        case kMovingDirTop:        // 上
            frame.origin.y -= kMovingDelta;//delta偏差 移动的位置
            break;
        case kMovingDirBottom:        // 下
            frame.origin.y += kMovingDelta;
            break;
        case kMovingDirLeft:        // 左
            frame.origin.x -= kMovingDelta;
            break;
        case kMovingDirRight:        // 右
            frame.origin.x += kMovingDelta;
            break;
    }
    
    // 3. 重新为对象的结构体属性赋值
    self.iconButton.frame = frame;
}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值