iOS 仿射变换

一、iOS 仿射变换CGAffineTransform详解
IOS开发UI篇--仿射变换(CGAffineTransform)使用小结
iOS 仿射变换CGAffineTransform

1、UIView有CGAffineTransform类型的属性transform,它是定义在二维空间上完成View的平移旋转缩放等效果的实现.

   //初始化,  CGAffineTransformIdentity是系统提供的一个常量,/* The identity transform: [ 1 0 0 1 0 0 ]. */(和原图一样的transform);
   CGAffineTransform  transform = CGAffineTransformIdentity;

2、一个 view的 transform 属性对应一个 CGAffineTransform类的 3x3 矩阵(线性代数中的概念)。所有的变换都是以这个 view的 center做基准的。

创建一个CGAffineTransform:CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty),其中
a表示水方向的缩放
tx表示水平方向的偏移
d表示垂直方向的缩放,
ty表示垂直方向的偏移
如果 b、c不为 0 的话,那么肯定发生了旋转。

transform.png

平移###

根据本身的transform进行平移 CGAffineTransformMakeTranslation(CGFloat tx,CGFloat ty)
根据本身的 transform 另外的transform进行平移CGAffineTransformTranslate(CGAffineTransform t,CGFloat tx,CGFloat ty)

缩放###

根据本身的transform进行缩放 CGAffineTransformMakeScale(CGFloat sx,CGFloat sy)
根据本身的transform后者另外的transform进行缩放CGAffineTransformScale(CGAffineTransform t,CGFloat sx,CGFloat sy)

旋转###

根据本身的transform进行旋转 CGAffineTransformMakeRotation(CGFloat angle)(angle 旋转的角度)
根据本身的transform后者另外的transform进行旋转 CGAffineTransformRotate(CGAffineTransform t,CGFloat angle)

反向旋转###

CGAffineTransformInvert(CGAffineTransform t)

合并###

 CGAffineTransformConcat(_ t1: CGAffineTransform, _ t2: CGAffineTransform) -> CGAffineTransform

应用仿射矩阵###

CGPointApplyAffineTransform 得到新的点
CGSizeApplyAffineTransform  得到新的size
CGRectApplyAffineTransform  得到新的rect

评测矩阵###

CGAffineTransformIsIdentity  是否是CGAffineTransformIsIdentity
CGAffineTransformEqualToTransform 看两个矩阵是否相等

二、UIPanGestureRecognizer拖动手势
UIPanGestureRecognizer使用小结

1、UIGestureRecognizer是一个定义基本手势的抽象类,具体什么手势,在以下子类中包含

1)拍击UITapGestureRecognizer (任意次数的拍击)      
2)向里或向外捏UIPinchGestureRecognizer (用于缩放)      
3)摇动或者拖拽UIPanGestureRecognizer (拖动)     
4)擦碰UISwipeGestureRecognizer (以任意方向)      
5)旋转UIRotationGestureRecognizer (手指朝相反方向移动)      
6)长按UILongPressGestureRecognizer (长按)
// 这些操作的目的都是用来修改UIView对象的frame,center,bounds属性,还有一个Transform属性。

2、UIView管理手势识别器的方法有:

– addGestureRecognizer:
– removeGestureRecognizer:  
   gestureRecognizers  //property
– gestureRecognizerShouldBegin:

3、手势的处理

//panGesture自定义处理手势的方法
- (void)panGesture:(UIPanGestureRecognizer *)pan{

    CGPoint translatedPoint = [pan translationInView:self.view];

    CGFloat x = pan.view.center.x + translatedPoint.x;
    CGFloat y = pan.view.center.y + translatedPoint.y;

    CGPoint center = CGPointMake(x, y);

    XLOG(@"center = %@",NSStringFromCGPoint(center));
    //每次移动完,将移动量置为0,否则下次移动会加上这次移动量
    [pan setTranslation:CGPointMake(0, 0) inView:self.view];
    if (pan.state == UIGestureRecognizerStateEnded) {
  //        NSLog(@"pan.view == %f", pan.view.center.x);
    }
    //center超过显示范围
    if (center.x < 0 || center.x > SCREEN_WIDTH - _imageView.qsWidth/2 ||
        center.y < 0 || center.y > _funcBtnListView.qsTop - _imageView.qsHeight/2) {
        return;
    }
    _imageView.center = center;
}

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
    CGPoint translation = [gestureRecognizer translationInView:gestureRecognizer.view];
    NSLog(@"translation == %f", translation.x);
  //    if (translation.x <= 0) {  //只能右滑
  //        return NO;
  //    }
    return YES;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容