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
时间: 2024-08-24 16:22:38

017旋转和缩放视图的相关文章

Cg入门11:Vertex Shader - 几何变换 —MVP矩阵变换(旋转、缩放)

旋转.缩放demo C# Code: Shader Code:

旋转 平移 缩放

------------------------------  旋转 平移 缩放  ---------------------------------- - (void)drawRect:(CGRect)rect { // 获取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //  Current graphics state's Transformation Matrix // 缩放 CGContextScaleCTM(ctx, 0.

CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)(转载)

在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾斜.移动这四种类型的变形处理,本文将对此做详细介绍. 一.旋转 rotate 用法:transform: rotate(45deg); 共一个参数“角度”,单位deg为度的意思,正数为顺时针旋转,负数为逆时针旋转,上述代码作用是顺时针旋转45度. 二.缩放 scale 用法:transform: scale(0.5)  或者  transform: scale(0.5, 2); 参数表示缩放倍数: 一个参数时:表示水平和

图像几何变换:旋转,缩放,斜切

几何变换 几何变换可以看成图像中物体(或像素)空间位置改变,或者说是像素的移动. 几何运算需要空间变换和灰度级差值两个步骤的算法,像素通过变换映射到新的坐标位置,新的位置可能是在几个像素之间,即不一定为整数坐标.这时就需要灰度级差值将映射的新坐标匹配到输出像素之间.最简单的插值方法是最近邻插值,就是令输出像素的灰度值等于映射最近的位置像素,该方法可能会产生锯齿.这种方法也叫零阶插值,相应比较复杂的还有一阶和高阶插值. 插值算法感觉只要了解就可以了,图像处理中比较需要理解的还是空间变换. 空间变换

【转载】Unity中矩阵的平移、旋转、缩放

By:克森 简介 在这篇文章中,我们将会学到几个概念:平移矩阵.旋转矩阵.缩放矩阵.在学这几个基本概念的同时,我们会用到 Mesh(网格).数学运算.4x4矩阵的一些简单的操作.但由于克森也是新手,文章的严谨性可能不是很高,还请大神们多多指教. 创建项目 首先创建一个Unity工程,克森把他命名为“Matrix of China”(中国的矩阵),基本配置如下图所示: 为了便于查找,让我们在 Assets 目录下新建三个文件夹,分别命名为“Scripts”.“Shader”.“Materials”

OpenGL中旋转平移缩放等变换的顺序对模型的影响

l 前提: 0x01. 假设绘制顶点的语句为Draw Array,变换的语句(旋转.平移.缩放)为M,而 M0; M1; M2; Draw Array; 则称对Array先进行M2再进行M1.M0 0x02. 本文基于SharpGL版本的OpenGL(C#版本) l 预备知识: 0x01. gl.Rotate是按照右手系来计算的,即设旋转轴为大拇指方向,则从指跟到指尖的方希为正方向. 0x02. gl.Scale 会改变法向量的值,从而会对颜色有影响.通过gl.Enable(OpenGL.GL_

CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)

CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate) 在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾斜.移动这四种类型的变形处理,本文将对此做详细介绍. 一.旋转 rotate 用法:transform: rotate(45deg); 共一个参数"角度",单位deg为度的意思,正数为顺时针旋转,负数为逆时针旋转,上述代码作用是顺时针旋转45度. 二.缩放 scale 用法:transform

矩阵的平移、旋转与缩放

世界坐标中的一个点乘以一个四维矩阵,可以实现平移,旋转和缩放等等. 平移就是,旋转和缩放就是(M分别是对应的旋转缩放矩阵) 当中为0时,是向量,为1时,是坐标. 平移, 旋转, 缩放,

Android进度条控制图片旋转&#183;平移&#183;缩放&#183;倾斜

初来乍到 平时代码多写于某笔记软件上 现在在这里记录一些 从初学Android开始写起 可能有些地方实现得略小白 或者还不能熟练使用博客园的功能 但是希望能够对需要的人有帮助 不足之处请多指教 一般使用工具:android studio 那么 Here we go. have a good time. 用进度条实现控制图片旋转·平移·缩放·倾斜 效果: 1 public class MainActivity extends AppCompatActivity implements SeekBar