CGAffineTransform

//移动效果
CGAffineTransform CGAffineTransformMakeTranslation (    CGFloat tx,    CGFloat ty );

CGAffineTransform CGAffineTransformTranslate (    CGAffineTransform t,    CGFloat tx,    CGFloat ty );

//旋转效果
CGAffineTransform CGAffineTransformMakeRotation (    CGFloat angle );

CGAffineTransform CGAffineTransformRotate (    CGAffineTransform t,    CGFloat angle );

//缩放效果
CGAffineTransform CGAffineTransformMakeScale (    CGFloat sx,    CGFloat sy );

CGAffineTransform CGAffineTransformScale (    CGAffineTransform t,    CGFloat sx,    CGFloat sy );

//反转效果
CGAffineTransform CGAffineTransformInvert (    CGAffineTransform t );

//只对局部产生效果
CGRect CGRectApplyAffineTransform (    CGRect rect,    CGAffineTransform t );

//判断两个AffineTrans是否相等
bool CGAffineTransformEqualToTransform (    CGAffineTransform t1,    CGAffineTransform t2 );

//获得Affine Transform
CGAffineTransform CGContextGetUserSpaceToDeviceSpaceTransform (    CGContextRef c );

//下面的函数只起到查看的效果,比如看一下这个用户空间的点,转换到设备空间去坐标是多少

CGPoint CGContextConvertPointToDeviceSpace (    CGContextRef c,    CGPoint point );

CGPoint CGContextConvertPointToUserSpace (    CGContextRef c,    CGPoint point );

CGSize CGContextConvertSizeToDeviceSpace (    CGContextRef c,    CGSize size );

CGSize CGContextConvertSizeToUserSpace (    CGContextRef c,    CGSize size );

CGRect CGContextConvertRectToDeviceSpace (    CGContextRef c,    CGRect rect );

CGRect CGContextConvertRectToUserSpace (    CGContextRef c,    CGRect rect );

了解动画需要先了解仿射变换,先在View中添加一个按钮和一个图片, 通过这演示常见的变换,直接上码:

#import "ViewController.h"

#define M_PI        3.14159265358979323846264338327950288
<br>#define M_PI_2      1.57079632679489661923132169163975144
<br>#define M_PI_4      0.785398163397448309615660845819875721
@interface ViewController ()
{
    UIButton *btn;
    UIImageView *imgview;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    btn=[UIButton buttonWithType:UIButtonTypeSystem];
    btn.frame=CGRectMake(30, 30, 50, 50);
    btn.backgroundColor=[UIColor redColor];

    [btn setTitle:@"按钮" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(btnclick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];

    imgview=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"test.jpg"]];
    imgview.frame=CGRectMake(100, 100, 120, 120);
    [self.view addSubview:imgview];

}

 一.平移变换,当我实验平移时,将下面代码放在按钮点击方法中,第一个方法第一次点击有效,第二个是每次点击都会平移,第三个不会平移

//平移变换
  imgview.transform=CGAffineTransformMakeTranslation(10, 10); //每次移动参照点都是初始点
  imgview.transform=CGAffineTransformTranslate(imgview.transform, 20, 20);//平移参照第一个参数的点
  imgview.transform=CGAffineTransformIdentity;//初始点

 二、旋转

//旋转
   imgview.transform=CGAffineTransformMakeRotation(M_PI/4);//旋转参照初始值 正数顺时针 负数逆时针
   imgview.transform=CGAffineTransformRotate(imgview.transform, -M_PI/4);//旋转参照第一个参数的值

三、缩放

// 缩放
    imgview.transform=CGAffineTransformScale(imgview.transform,0.8,0.8);//在第一个参数的基础上缩放 第二三参数1时为正常大小
    imgview.transform=CGAffineTransformMakeScale(0.5,0.5);//在原视图的基础上缩放

四、翻转

//翻转
   // CGAffineTransform DefaultAffineTransform =CGAffineTransformMake(1, 0, 0, 1, 0, 0);//默认
   // imgview.transform=CGAffineTransformInvert(imgview.transform); //调用此行代码并不会产生翻转效果,因为恒等矩阵*恒等矩阵还是恒等矩阵,这样就没有变化
    CGAffineTransform AffineTransform =CGAffineTransformMake(0, 1, 1, 1, 1, 0);
    imgview.transform=CGAffineTransformInvert(AffineTransform);

五、合并

//合并 将两个仿射合并成一个仿射效果
//    CGAffineTransform AffineTransform1 =CGAffineTransformMakeScale(0.5,0.5);
     CGAffineTransform AffineTransform1=CGAffineTransformScale(imgview.transform,0.8,0.8);
     CGAffineTransform AffineTransform2 =CGAffineTransformMakeRotation(M_PI/4);
     CGAffineTransform AffineTransform3=CGAffineTransformConcat(AffineTransform1,AffineTransform2);
    CGAffineTransform AffineTransform4 =CGAffineTransformMake(0, 1, 1, 1, 1, 0);
    imgview.transform=CGAffineTransformConcat(AffineTransform3,AffineTransform4);

 六、判断是否相同

CGAffineTransform DefaultAffineTransform =CGAffineTransformMake(1, 0, 0, 1, 0, 0);
      CGAffineTransform DefaultAffineTransform1 =CGAffineTransformMake(1, 0, 0, 1, 0, 0);
//      CGAffineTransform AffineTransform1 =CGAffineTransformMakeScale(0.5,0.5);
      bool flag=CGAffineTransformEqualToTransform(DefaultAffineTransform, DefaultAffineTransform1);
      NSLog(@"%d",flag);
时间: 2024-11-29 18:19:30

CGAffineTransform的相关文章

ios-iOS8 支付宝跳转会报错闪退

问题描述 iOS8 支付宝跳转会报错闪退 使用新版的支付宝sdk,支持64位的,但在使用的时候,如果有装支付宝APP的话,跳转会报错闪退: Assertion failed: (CGFloatIsValid(x) && CGFloatIsValid(y)) function void CGPathMoveToPoint(CGMutablePathRef const CGAffineTransform * CGFloat CGFloat) file Paths/CGPath.cc line

使用FastCoder写缓存单例

使用FastCoder写缓存单例 FastCoder可以存储字典,数组,鄙人将FastCoder封装,CoreData可以缓存的东西,用这个都可以缓存,但是只适合缓存少量的数据(不适合存储几万条数据). 基于文件的类请参考上一章节内容 使用详情: 源码: 使用的缓存文件 SharedFile.h 与 SharedFile.m // // SharedFile.h // Array // // Created by YouXianMing on 14/12/1. // Copyright (c)

iOS开发的一些小技巧

  1.神器计算图片位置的函数:AVMakeRectWithAspectRatioInsideRect() 通过这个函数,我们可以计算一个图片放在另一个 view 按照一定的比例居中显示,可能说的我比较抽象,还是用图来显示,可以说它可以直接一个 image 以任何的比例显示显示在 imageview 中居中所处的位置,拿 UIViewContontAspectFit来演示, UIImageView *imageView = [[UIImageView alloc] initWithFrame:C

IOS多媒体

--iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePicker

Core Animation简介

1.我们是使用Core Animatioin创建动画的时,实质上是更改CALayer的属性,然后让这些属性流畅的变化.可以使用Core Animation对象的位置.颜色.透明度以及CGAffine变换来制作动画. 2.一个简单的小动画 /隐式动画/   - (void)viewDidLoad {     [super viewDidLoad];     UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(

iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePickerControlle

iOS开发系列--无限循环的图片浏览器

概述 UIKit框架中有大量的控件供开发者使用,在iOS开发中不仅可以直接使用这些控件还可以在这些控件的基础上进行扩展打造自己的控件.在这个系列中如果每个控件都介绍一遍确实没有必要,所谓授人以鱼不如授人以渔,这里会尽可能让大家明白其中的原理,找一些典型的控件进行说明,这样一来大家就可以触类旁通.今天我们主要来看一下UIScrollView的内容: UIView UIScrollView 实战--图片浏览器 UIView 在熟悉UIScrollView之前很有必要说一下UIView的内容.在上一篇

[翻译] EnterTheMatrix

Enter The Matrix https://github.com/mpospese/EnterTheMatrix The sample application to accompany my conference talk "Enter The Matrix" on matrix transformations. Slides can be downloaded from here. It's an iPad app using Storyboards and ARC (stri

iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流

上篇博客的实例是自带的UICollectionViewDelegateFlowLayout布局基础上来做的Demo, 详情请看<iOS开发之窥探UICollectionViewController(二) --详解CollectionView各种回调>.UICollectionView之所以强大,是因为其具有自定义功能,这一自定义就不得了啦,自由度非常大,定制的高,所以功能也是灰常强大的.本篇博客就不使用自带的流式布局了,我们要自定义一个瀑布流.自定义的瀑布流可以配置其参数: 每个Cell的边距