zoukankan      html  css  js  c++  java
  • 017旋转和缩放视图

    效果如下:

    ViewController.h

     1 #import <UIKit/UIKit.h>
     2 
     3 @interface ViewController : UIViewController {
     4     @private
     5     UIImageView *imgVTransform;
     6     CGFloat rotate;
     7     CGFloat scale;
     8     BOOL isInvert;
     9 }
    10 
    11 @end

    ViewController.m

      1 #import "ViewController.h"
      2 
      3 @interface ViewController ()
      4 - (void)rotateDidPush;
      5 - (void)bigDidPush;
      6 - (void)smallDidPush;
      7 - (void)invertDidPush;
      8 - (void)transformWithAnimation;
      9 @end
     10 
     11 @implementation ViewController
     12 
     13 - (void)viewDidLoad {
     14     [super viewDidLoad];
     15     rotate = 0.0;
     16     scale = 1.0;
     17     isInvert = NO;
     18     
     19     //追加ImageView图片视图
     20     UIImage *img = [UIImage imageNamed:@"Cat.jpg"];
     21     imgVTransform = [[UIImageView alloc] initWithImage:img];
     22     imgVTransform.frame = CGRectMake(0, 0, self.view.frame.size.width-20, 280);
     23     CGPoint newPoint = self.view.center;
     24     newPoint.y -= 20;
     25     imgVTransform.center = newPoint;
     26     imgVTransform.layer.masksToBounds = YES;
     27     imgVTransform.layer.cornerRadius = 8.0;
     28     imgVTransform.layer.borderColor = [UIColor grayColor].CGColor;
     29     imgVTransform.layer.borderWidth = 2.0;
     30     [self.view addSubview:imgVTransform];
     31     //追加4个Button按钮;表示“旋转”、“放大”、“缩小”、“反转”
     32     UIButton *btnRotate = [UIButton buttonWithType:UIButtonTypeRoundedRect];
     33     btnRotate.frame = CGRectMake(0, 0, 50, 40);
     34     newPoint.x -= 100;
     35     newPoint.y = self.view.frame.size.height - 70;
     36     btnRotate.center = newPoint;
     37     btnRotate.backgroundColor = [UIColor orangeColor];
     38     [btnRotate setTitle:@"旋转" forState:UIControlStateNormal];
     39     [btnRotate addTarget:self action:@selector(rotateDidPush) forControlEvents:UIControlEventTouchUpInside];
     40     [self.view addSubview:btnRotate];
     41     
     42     UIButton *btnBig = [UIButton buttonWithType:UIButtonTypeRoundedRect];
     43     btnBig.frame = CGRectMake(0, 0, 50, 40);
     44     newPoint.x += 60;
     45     btnBig.center = newPoint;
     46     btnBig.backgroundColor = [UIColor lightGrayColor];
     47     [btnBig setTitle:@"放大" forState:UIControlStateNormal];
     48     [btnBig addTarget:self action:@selector(bigDidPush) forControlEvents:UIControlEventTouchUpInside];
     49     [self.view addSubview:btnBig];
     50     
     51     UIButton *btnSmall = [UIButton buttonWithType:UIButtonTypeRoundedRect];
     52     btnSmall.frame = CGRectMake(0, 0, 50, 40);
     53     newPoint.x += 60;
     54     btnSmall.center = newPoint;
     55     btnSmall.backgroundColor = [UIColor yellowColor];
     56     [btnSmall setTitle:@"缩小" forState:UIControlStateNormal];
     57     [btnSmall addTarget:self action:@selector(smallDidPush) forControlEvents:UIControlEventTouchUpInside];
     58     [self.view addSubview:btnSmall];
     59     
     60     UIButton *btnInvert = [UIButton buttonWithType:UIButtonTypeRoundedRect];
     61     btnInvert.frame = CGRectMake(0, 0, 50, 40);
     62     newPoint.x += 60;
     63     btnInvert.center = newPoint;
     64     btnInvert.backgroundColor = [UIColor greenColor];
     65     [btnInvert setTitle:@"反转" forState:UIControlStateNormal];
     66     [btnInvert addTarget:self action:@selector(invertDidPush) forControlEvents:UIControlEventTouchUpInside];
     67     [self.view addSubview:btnInvert];
     68 }
     69 
     70 - (void)didReceiveMemoryWarning {
     71     [super didReceiveMemoryWarning];
     72     // Dispose of any resources that can be recreated.
     73 }
     74 
     75 #pragma mark - Private Methods
     76 - (void)rotateDidPush {
     77     //以90度为单位旋转
     78     rotate += 90.0;
     79     if (rotate > 359.0) {
     80         rotate = 0.0;
     81     }
     82     [self transformWithAnimation];
     83 }
     84 
     85 - (void)bigDidPush {
     86     //以0.1为单位放大
     87     scale += 0.1;
     88     [self transformWithAnimation];
     89 }
     90 
     91 - (void)smallDidPush {
     92     //以0.1为单位缩小
     93     scale -= 0.1;
     94     if (scale < 0.1) {
     95         scale = 0.1;
     96     }
     97     [self transformWithAnimation];
     98 }
     99 
    100 - (void)invertDidPush {
    101     //左右反转
    102     isInvert = !isInvert;
    103     [self transformWithAnimation];
    104 }
    105 
    106 - (void)transformWithAnimation {
    107     [UIView beginAnimations:nil context:NULL];
    108     
    109     CGAffineTransform transformRotate = CGAffineTransformMakeRotation(rotate * ( M_PI / 180.0));
    110     CGAffineTransform transformScale = CGAffineTransformMakeScale(scale, scale);
    111     CGAffineTransform transformAll = CGAffineTransformConcat(transformRotate, transformScale);
    112     if (isInvert) {
    113         transformAll = CGAffineTransformScale(transformAll, -1.0, 1.0);
    114     }
    115     imgVTransform.transform = transformAll;
    116     [UIView commitAnimations];
    117 }
    118 
    119 @end
  • 相关阅读:
    【CodeForces 438D 】The Child and Sequence
    【雅礼集训 2017 Day1】市场
    【POJ2528】Mayor's posters
    【NOIP模拟】图论题Graph
    【BZOJ2654】Tree
    【NOIP模拟】函数
    【NOIP模拟】箱子
    【CQOI2014】数三角形
    【USACO2009Feb】股票市场
    【APIO2009-3】抢掠计划
  • 原文地址:https://www.cnblogs.com/huangjianwu/p/4575965.html
Copyright © 2011-2022 走看看