UIKit基础:10.纯代码的实现Transform和平移VIew的功能

在前面, 我们学会了UIViewTransform属性, 以及Frame属性, 并且使用storyboard的快捷方法实现了我们平移, 角度还有缩放等等功能, 那么我们如果要用纯代码的形式去实现呢? 现在让我们一起来看看如何去使用纯代码的形式完成之前我们所有的功能, 下面来看看例子:





首先我们需要创建一个可控的UIButton:

@interface ViewController ()
{
    UIButton *_button;
}
@end

- (void)myButton
{
    // 添加Button到UIView
    _button = [UIButton buttonWithType:UIButtonTypeSystem];
    [_button setFrame:CGRectMake(self.view.frame.size.width / 2 - 40, 80, 80, 80)];
    [_button setBackgroundColor:[UIColor redColor]];
    [_button setTitle:@"我是按钮" forState:UIControlStateNormal];
    [self.view addSubview:_button];
}

由于我们需要在其他的方法获得该Button的属性, 所以需要把Button变成成员变量, 这样子方便我们对它进行操作.





创建好可控Button了, 然后再创建我们的控制Button:

- (void)addActionButtonsToView:(UIView *)view images:(NSArray *)images action:(SEL)action
{
    // 使用循环创建4个Button
    for (int i = 0; i < 4; i++) {
        // 1.实例化UIButton
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        // 2.设置Button的Frame
        [btn setFrame:CGRectMake((i % 2) * 80, (i / 2) * 80, 80, 80)];
        // 3.设置默认状态下的Button图片
        NSString *textNormal = [NSString stringWithFormat:@"sub_black_%@.png", images[i]];
        [btn setImage:[UIImage imageNamed:textNormal] forState:UIControlStateNormal];
        // 4.设置高亮状态下的Button图片
        NSString *textHigh = [NSString stringWithFormat:@"sub_blue_%@.png", images[i]];
        [btn setImage:[UIImage imageNamed:textHigh] forState:UIControlStateHighlighted];
        // 5.监听UIButton的方法
        [btn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
        // 6.设置Button的Tag值
        [btn setTag:i];
        // 7.添加Button到View上
        [view addSubview:btn];
    }

}




创建完Button之后我们需要创建两个View用来存放按钮, 并且给Button设置图片,位置, 大小:

- (void)myView
{
    UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 160, 160, 160)];
    [view1 setBackgroundColor:[UIColor blueColor]];
    [self.view addSubview:view1];
    
    UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(self.view.frame.size.width - 160, self.view.frame.size.height - 160, 160, 160)];
    [view2 setBackgroundColor:[UIColor greenColor]];
    [self.view addSubview:view2];
    
    NSArray *imageNames = @[@"up", @"down", @"prev", @"next"];
    [self addActionButtonsToView:view1 images:imageNames action:@selector(translationAction:)];
    
    NSArray *imageNames2 = @[@"rotate_ccw", @"rotate_cw", @"add", @"remove"];
    [self addActionButtonsToView:view2 images:imageNames2 action:@selector(transformAction:)];
}





最后再把创建好的方法添加到viewDidLoad方法里:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self myButton];

    [self myView];
}




这就是效果图:






把界面搭起来之后, 我们就要去实现平移的功能:

- (void)translationAction:(UIButton *)sender
{
    NSLog(@"我工作了 %ld", sender.tag);
    CGPoint point = [_button center];
    
    switch (sender.tag) {
        case 0:
            point.y -= 20; // 上
            break;
        case 1:
            point.y += 20; // 下
            break;
        case 2:
            point.x -= 20; // 左
            break;
        case 3:
            point.x += 20; // 右
            break;
            
        default:
            break;
    }
    
    [UIView animateWithDuration:1.0f animations:^{
        [_button setCenter:point];
    }];
}




最后就是实现Transform的方法:

- (void)transformAction:(UIButton *)sender
{
    CGAffineTransform transform;
    
    switch (sender.tag) {
        case 0:
            transform = CGAffineTransformRotate(_button.transform, -M_PI_4);
            break;
        case 1:
            transform = CGAffineTransformRotate(_button.transform, M_PI_4);
            break;
        case 2:
            transform = CGAffineTransformScale(_button.transform, 1.2, 1.2);
            break;
        case 3:
            transform = CGAffineTransformScale(_button.transform, 1.0 / 1.2, 1.0 / 1.2);
            break;
            
        default:
            break;
    }
    [UIView animateWithDuration:1.0f animations:^{
        [_button setTransform:transform];
    }];
}




最终的效果我这里就没法给大家看了, 还是自己回去动手试试吧.




补充一个知识点, 大家都看到我创建UIButton的时候是用一个方法, 里面使用for循环就创建出来的, 其实这个有设计一些封装的思想, 是模仿apple的实例方法来创建的, 大家以后要多多学习apple的封装方法, 这样子可以让我们在开发的时候更快的上手.



好了这次就讲到这里, 下次我们继续~~~



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值