IOS UIButton详解 & Button缩放旋转位移实例

本文详细介绍了如何使用UIButton进行iOS开发,包括创建、布局、设置属性、状态变化、样式定制以及通过代码实现的按钮交互操作。同时,通过实例展示了如何自定义按钮样式,并利用transform属性调整按钮的位置、大小、旋转和缩放,提供了丰富的iOS开发技巧。

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

UIButton 是经常使用的空间,可用通过视窗拖控件,但通常用代码创建。

一 UIButton 常用属性已经代码创建方式
// 创建一个自定义的按钮
UIButton *btn = [[UIButton alloc]init];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];//按钮的内容需要自定义,参考四UIButton 状态


// 设置按钮的位置和尺寸
CGFloat buttonW = 100;
CGFloat buttonH = buttonW;
CGFloat buttonX = (self.view.frame.size.width - buttonW) * 0.5;
CGFloat buttonY = (self.view.frame.size.height - buttonH) * 0.5;
btn.frame =  CGRectMake(buttonX,buttonY ,buttonW , buttonH);

// 监听按钮点击(点击按钮后就会调用self的btnClick方法)
[btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];

// 定义按钮标题字体格式
[button.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];

// 设置按钮在 默认 状态下的属性
// 1.默认状态的背景
[btn setBackgroundImage:[UIImage imageNamed:@"imageName"] forState:UIControlStateNormal];

// 2.默认状态的文字
[btn setTitle:@"title" forState:UIControlStateNormal];

// 3.默认状态的文字颜色 UIColor 是个类,有多种颜色可选
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];



// 设置按钮在 高亮 状态下的属性
// 1.高亮状态的背景
[btn setBackgroundImage:[UIImage imageNamed:@"imageName2"] forState:UIControlStateHighlighted];

// 2.高亮状态的文字
[btn setTitle:@"title2" forState:UIControlStateHighlighted];

// 3.高亮状态的文字颜色
[btn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];


// 添加按钮View
[self.view addSubview:btn];


二 UIButton 的状态
UIButton 状态相关操作状态枚举值
normal 普通状态默认情况UIControlStateNormal
highlighted 高亮状态按钮被按下去的时候UIControlStateHighlighted
disabled 不可用状态enabled属性为NO时,就是处于disable状态,代表按钮不可用UIControlStateDisabled

三 transform属性

通过transform属性可以修改控件的位移、缩放、旋转

// 修改位置
// tx/ty 是移动距离,正值表示上移,负值表示下移
btn.transform = CGAffineTransformMakeTranslation(tx,ty);//通过CGAffineTransformMakeTranslation方法每次形变都基于原始值
btn.transform = CGAffineTransformTranslate(btn.transform,tx,ty);//基于btn上次的值,改变x和y值

// 缩放
// sx/sy 表示缩放比例 1表示正常,小于1表示缩小,大于1表示放大
btn.transform = CGAffineTransformMakeScale(sx,sy);
btn.transform = CGAffineTransformScale(this.transform,sx,sy);

// 旋转
// angle 是弧度值。正值为正时针,负值为负时针
btn.transform = CGAffineTransformMakeRotation(angle); //通过宏 M_PI,M_PI_4 来这设置
btn.transform = CGAffineTransformRotate(this.transform,angle);

// 旋转和移动
btn.transform = CGAffineTransformMakeTranslation(tx,ty);
btn.transform = CGAffineTransformRotate(this.transform,angle);

//重置位置
btn.transform = CGAffineTransformIdentity;


四 UIButton 按钮样式

UIButton自带了很多种不同的样式,创建的时候可用指定:

typedef NS_ENUM(NSInteger, UIButtonType) {
    UIButtonTypeCustom = 0,                         // no button type
    UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0),  // standard system button

    UIButtonTypeDetailDisclosure,
    UIButtonTypeInfoLight,
    UIButtonTypeInfoDark,
    UIButtonTypeContactAdd,
    
    UIButtonTypeRoundedRect = UIButtonTypeSystem,   // Deprecated, use UIButtonTypeSystem instead
};

枚举值对应样式
UIButtonTypeCustom无类型,按钮的内容需要自定义
UIButtonTypeDetailDisclosure003759_hbwb_1032974.png
UIButtonTypeInfoLight003851_boij_1032974.png
UIButtonTypeInfoDark003928_xZ5F_1032974.png
UIButtonTypeContactAdd004023_Tbc2_1032974.png


五 代码部分
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad { [super viewDidLoad];
   
    //1.创建按钮
    UIButton *btn = [[UIButton alloc]init];
    //2.添加到view上
    [self.view addSubview:btn];
    //3.设置位置
    btn.frame=CGRectMake(100,100,100,100);
    //4.设置图片
    UIImage *img = [UIImage imageNamed:@"tx1.jpg"];
    [btn setBackgroundImage:img forState:UIControlStateNormal];
   
    /******* transform属性 ********/
    //改变位置
    [self translate:btn];
    //重置位置
    [self reset:btn];
    //缩放
    [self scale:btn];
    //旋转
    [self rotate:btn];
    
    
}



/**
 *  改变位置
 *
 *  @param btn <#btn description#>
 */
- (IBAction)translate:(UIButton *)btn
{
    CGAffineTransform transform = btn.transform;
    transform = CGAffineTransformTranslate(transform, -100, 0);
    btn.transform = transform;
}



/**
 *  重置位置
 *
 *  @param btn <#btn description#>
 */
- (IBAction)reset:(UIButton *)btn {
    btn.transform = CGAffineTransformIdentity;
}




/**
 *  缩放
 *
 *  @param btn <#btn description#>
 */
- (IBAction)scale:(UIButton *)btn {
    CGAffineTransform transform = btn.transform;
    // 放大
    //transform = CGAffineTransformScale(transform, 1.2, 1.2);
    
    // 缩小
    transform = CGAffineTransformScale(transform, .5, .5);
    // 重置值
    btn.transform = transform;
}




/**
 *  旋转
 *
 *  @param btn
 */
- (IBAction)rotate:(UIButton *)btn {
    CGAffineTransform transform = btn.transform;
    // 左旋转
    //transform = CGAffineTransformRotate(transform, -M_PI_4);
    
    // 右旋转
    transform = CGAffineTransformRotate(transform, M_PI_4);
    // 重置值
    btn.transform = transform;
}
@end




转载于:https://my.oschina.net/wolx/blog/359398

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值