zoukankan      html  css  js  c++  java
  • UIKit基础:8.UIView的常用属性

    在前面, 我们讲完了UIView的几个常用属性, 现在我们来看看我们日常中经常看到的属性, 它就是Animation属性, 也就是我们的动画效果, 这次的例子我会在上一篇博文的基础上加以改动一下, 只添加几行代码, 让它实现的效果不一样, 下面来看看吧:


    首先我们来搭建一下storyboard的界面并且关联方法:





    下面我们就来实现两个方法:

    - (IBAction)scaleButton:(UIButton *)sender {
        CGAffineTransform transform = CGAffineTransformScale(_grayView.transform, 1.1f, 1.1f);
        CGAffineTransform transform1 = CGAffineTransformScale(_grayView.transform, 0.9f, 0.9f);
        
        if (sender.tag == 0) {
            [_grayView setTransform:transform];
        } else if (sender.tag == 1) {
            [_grayView setTransform:transform1];
        }
        
    }
    
    - (IBAction)rotateButton:(UIButton *)sender {
        CGAffineTransform transform = CGAffineTransformRotate(_grayView.transform, M_2_PI / 2);
        CGAffineTransform transform1 = CGAffineTransformRotate(_grayView.transform, -(M_2_PI / 2));
        
        if (sender.tag == 0) {
            [_grayView setTransform:transform1];
        } else if (sender.tag == 1) {
            [_grayView setTransform:transform];
        }
    
    }
    




    这两个方法和我们之前的那篇博文是一样的, 但我们现在要改动一下, 添加几行代码:

    - (IBAction)scaleButton:(UIButton *)sender {
        CGAffineTransform transform = CGAffineTransformScale(_grayView.transform, 1.1f, 1.1f);
        CGAffineTransform transform1 = CGAffineTransformScale(_grayView.transform, 0.9f, 0.9f);
        
        // 定义动画效果
        [UIView beginAnimations:nil context:nil];
        
        // 动画执行的时间
        [UIView setAnimationDuration:1.0f];
        if (sender.tag == 0) {
            [_grayView setTransform:transform];
        } else if (sender.tag == 1) {
            [_grayView setTransform:transform1];
        }
        
        // 开始执行动画
        [UIView commitAnimations];
        
    }

    在这里我就没法把效果图粘贴出来了, 大家回去自己试一下就知道了~~~



    回去试完之后, 大家肯定觉得非常的神奇, 但apple不推荐这么使用, 因为这代码太麻烦了, 看到这里, 估计有些人眼睛都睁大了, 就三句代码, 还麻烦啊? 其实这个是的, 下面我们来看看改良后的方法:

    <span style="font-size:12px;">- (IBAction)scaleButton:(UIButton *)sender {
        CGAffineTransform transform = CGAffineTransformScale(_grayView.transform, 1.1f, 1.1f);
        CGAffineTransform transform1 = CGAffineTransformScale(_grayView.transform, 0.9f, 0.9f);
            
        [UIView animateWithDuration:1.0f animations:^{
            if (sender.tag == 0) {
                [_grayView setTransform:transform];
            } else if (sender.tag == 1) {
                [_grayView setTransform:transform1];
            }
        } completion:^(BOOL finished) {
            NSLog(@"动画完成");
        }];
        
    }</span>


    那么这个方法好在哪里呢?? 我来给大家解释一下, 在第一个方法里, 如果我们要输入某些的东西, 或者在动画执行完之后才做某事, 那么第一种方法就非常不适合, 因为这种方法会把编译和我们所要做的事情一起执行的, 而第二种方法, 我们可以执行完动画之后再执行其他事情, 这样子就会有层次感.




    而且在第一个block代码块里, 可以进行非常多的操作, 比如更换UIView的颜色, 位置, 大小等等一切属性都是可以的, 并且不会影响到completion代码块里面的内容.




    好了, 剩下的其他UIView的属性就有待大家去挖掘了~~~这次就讲到这里, 下次继续~~

  • 相关阅读:
    vue form dynamic validator All In one
    TypeScript api response interface All In One
    closable VS closeable All In One
    macOS 如何开启 WiFi 热点 All In One
    vue css inline style All In One
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)
    牛腩新闻 59 整合添加新闻页 FreeTextBox 富文本编辑器,检测到有潜在危险的 Request.Form 值,DropDownList 的使用
    牛腩新闻 61尾声: error.aspx的使用 防止报错
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (上)
    牛腩新闻 62:尾声续2 asp.net的编译和发布
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4333159.html
Copyright © 2011-2022 走看看