IOS开发基础—按钮(button)基本操作

来源:互联网 发布:淘宝买家怎么修改中评 编辑:程序博客网 时间:2024/05/29 15:20

作者声明

因个人能力问题,文中不免会有错误之处,欢迎各位读者交流,批评,指正!

摘要

本文通过一个实例学习按钮的基本操作:为一个button设置一个背景图片,另外设置八个按钮,分别控制该button的空间平移和缩放、旋转变换。

用到的按钮属性总结

  1. frame
    1.1 表示控件的位置和尺寸(以父控件的左上角为左边远点(0,0))。
    1.2 修改这个属性,可以调整控件的位置和尺寸。
  2. center
    2.1 表示控件的中点(以父控件的左上角为坐标原点)。
    2.2 修改这个属性,只能调整控件的尺寸。
  3. bounds
    3.1 表示控件的位置和尺寸(以自己的左上角为坐标原点,位置永远是(0.0))
    3.2 修改这个属性,只能调整控件的尺寸。
  4. tag
    4.1 表示控件的标识符.
    4.2 通过不同的标识符可以区分不同的控件。
  5. transform
    5.1 表示控件的形变状态,常用的有旋转角度,缩放比例)
    5.2 修改方法包括绝对修改和相对修改。

实例

以下为实例:

Main.stroryboard

(待完善)

viewController.h 文件代码

#import <UIKit/UIKit.h>@interface ViewController : UIViewController// 定义成员but。@property (weak, nonatomic) IBOutlet UIButton *but;// 声明移动方法。- (IBAction)move:(id)sender;// 声明缩放方法。- (IBAction)scale:(id)sender;// 声明旋转方法。- (IBAction)rotate:(id)sender;@end

viewController.m文件代码

////  ViewController.m//  按钮操作练习////  Created by dqw on 15/5/5.//  Copyright (c) 2015年 itcast. All rights reserved.//#import "ViewController.h"// 方便更改。#define kDelta 100// 这个是类的延展,可以添加成员变量和方法。@interface ViewController ()@end@implementation ViewController#pragma mark 加载#pragma mark 定义block 实现代码重构// 此处要注意block定义的时候的类型,该方法没有声明,只有实现,应该是私有方法(不确定)。关于私有方法:此处的私有方法可能是指只能在本.m文件中使用的方法。- (void)butClickWithBlock:(void(^)())block{    [UIView beginAnimations:nil context:nil];    [UIView setAnimationDuration:1.0];    // 调用的时候要带括号的。    block();    [UIView commitAnimations];    }#pragma mark 上下左右移动- (IBAction)move:(id)sender{/* // 这是当前viewcontroller的一个方法,所以要用self来调用它,不仅仅是代码替换,而是方法调用。    [self butClickWithBlock:^{    // 不能直接对对象(viewcontroller-view-_but)的结构题(frame-origin)里的成员(y 或者x)直接赋值,所以要先讲结构体取出,修改其成员值,然后再将其赋值给对象的结构体。    CGRect frame = _but.frame;    // sender.tag也可。    int tag = [sender tag];    switch (tag)        {        case 1:            frame.origin.y -= kDelta;            break;        case 2:            frame.origin.x -= kDelta;            break;        case 3:            frame.origin.y += kDelta;            break;        case 4:            frame.origin.x += kDelta;            break;        default:            break;        }    _but.frame = frame;    }];*/#pragma mark 通过center来移动按钮。// 通过center来移动按钮    [self butClickWithBlock:^{        // 不能直接对对象(viewcontroller-view-_but)的结构体(center)里的成员(y 或者x)直接赋值,所以要先将结构体取出,修改其成员值,然后再将其赋值给对象的结构体。        // 需要注意center是CGPoint类型。        CGPoint center = _but.center;        // sender.tag也可。        int tag = [sender tag];        switch (tag)        {            case 1:                center.y -= kDelta;                break;            case 2:                center.x -= kDelta;                break;            case 3:                center.y += kDelta;                break;            case 4:                center.x += kDelta;                break;            default:                break;        }        _but.center = center;    }];}#pragma mark 缩放。- (IBAction)scale:(id)sender {    [self butClickWithBlock:^{    // 三目运算的优先级高于赋值运算,注意这些值的类型CGfloat。    CGFloat scalexy = [sender tag] == 5 ? 1.2 : 0.8;   //  CGAffineTransformMakeScale(<#CGFloat sx#>, <#CGFloat sy#>),这个函数是绝对缩放,下面的是相对缩放。    _but.transform = CGAffineTransformScale(_but.transform, scalexy, scalexy);    }];}#pragma mark 旋转。- (IBAction)rotate:(id)sender {    [self butClickWithBlock:^{        CGFloat angel = [sender tag] == 7 ? -M_PI_4 :  M_PI_4;    _but.transform = CGAffineTransformRotate(_but.transform, angel);    }]; // 注意此结束符号。}// 让按钮恢复到初始状态。- (IBAction)reset:(UIButton *)sender {    [self butClickWithBlock:^{    // 下面的xxident为一个矩阵常量,对角矩阵。    self.but.transform = CGAffineTransformIdentity;    }];   }@end

重点 难点 注意点

  1. 利用block提取共同的代码。
  2. 所以的方法都是viewController的类方法或者对象方法。
  3. 不能给对象的结构体中的成员直接赋值。
  4. tag center的使用
  5. transform里面的绝对变换和相对变换。
  6. 将按钮恢复到初始化状态,CGAffineTransformIdentity为一个常量,the identity transform :恒等变换,其值为单位对角矩阵:[ 1 0 0]
    [ 0 1 0]
    [ 0 0 1 ]

待完善的内容

  1. 了解更多的属性和方法
0 0
原创粉丝点击