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

被折叠的 条评论
为什么被折叠?



