zoukankan      html  css  js  c++  java
  • Block的示例学习

      1 @interface ViewController ()
      2 
      3 
      4 @property (weak, nonatomic) IBOutlet UIButton *btn;
      5 
      6 
      7 
      8 - (IBAction)reset:(id)sender;
      9 - (IBAction)run:(id)sender;
     10 - (IBAction)rotate:(id)sender;
     11 - (IBAction)scale:(id)sender;
     12 
     13 @end
     14 
     15 @implementation ViewController
     16 
     17 - (void)viewDidLoad {
     18     [super viewDidLoad];
     19     
     20 
     21 }
     22 
     23 //定义函数,参数是block类型 无返回值,无参数的block
     24 
     25 - (void)btnClickWithBlock:(void (^)())block
     26 {
     27     // 0.动画(头部-开始动画)
     28     [UIView beginAnimations:nil context:nil];
     29     // 设置动画的执行时间
     30     [UIView setAnimationDuration:1.0];
     31     
     32     //block的调用
     33     block();
     34     
     35     // 1.动画(尾部-提交动画-执行动画)
     36     [UIView commitAnimations];
     37 }
     38 
     39 
     40 
     41 - (void)didReceiveMemoryWarning {
     42     [super didReceiveMemoryWarning];
     43     // Dispose of any resources that can be recreated.
     44 }
     45 
     46 
     47 //重置
     48 - (IBAction)reset:(id)sender {
     49     
     50     [self btnClickWithBlock:^{
     51         _btn.transform = CGAffineTransformIdentity;
     52     }];
     53 }
     54 
     55 
     56 
     57 //行走
     58 - (IBAction)run:(id)sender {
     59     
     60     [self btnClickWithBlock:^{
     61         
     62         NSLog(@"self = %@",self);   //表示此控制器
     63         
     64         // 1.先取出frame
     65         CGPoint tempCenter = _btn.center;
     66         
     67         // 2.取出按钮的tag标记
     68         NSInteger tag = [sender tag];
     69         
     70         switch (tag) {
     71             case 10:
     72                 
     73                 tempCenter.y -= kDelta;
     74                 
     75                 break;
     76                 
     77             case 20:
     78                 
     79                 tempCenter.x -= kDelta;
     80                 break;
     81                 
     82             case 30:
     83                 
     84                 tempCenter.y += kDelta;
     85                 break;
     86                 
     87                 
     88             case 40:
     89                 
     90                 tempCenter.x += kDelta;
     91                 break;
     92                 
     93                 
     94             default:
     95                 break;
     96         }
     97         
     98         // 3.重新赋值按钮的frame
     99         _btn.center = tempCenter;
    100         
    101         
    102         
    103     }];
    104 }
    105 
    106 //旋转
    107 - (IBAction)rotate:(id)sender {
    108     
    109     [self btnClickWithBlock:^{
    110         NSInteger tag = [sender tag];
    111         if (10 == tag) { //
    112             _btn.transform = CGAffineTransformRotate(_btn.transform, M_PI_4 * -1);
    113         } else { //
    114             _btn.transform = CGAffineTransformRotate(_btn.transform, M_PI_4 * 1);
    115         }
    116     }];
    117     
    118 }
    119 
    120 //缩放
    121 - (IBAction)scale:(id)sender {
    122     
    123     [self btnClickWithBlock:^{
    124         CGFloat scale = [sender tag] == 20 ? 1.2 : 0.8;
    125         _btn.transform = CGAffineTransformScale(_btn.transform, scale, scale);
    126     }];
    127     
    128     
    129 }
  • 相关阅读:
    设置eclipse控制台上的信息输入到某个文件
    [HTML]去除li前面的小黑点,和ul、LI部分属性[转]
    fscanf函数的应用
    VC++中编译C出错:error C2143: syntax error : missing ';' before 'type'
    eclipse console输出有长度限制
    jstl之核心标签
    vmware esxi 6.0 开启嵌套虚拟化
    Proxmox如何进入单人维护模式(重置root密码)
    jstl错误排除:According to TLD or attribute directive in tag file, attribute value does not accept any expressions
    EL表达式
  • 原文地址:https://www.cnblogs.com/pengsi/p/5337303.html
Copyright © 2011-2022 走看看