首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么组合缩放和平移CGAffineTransform的动画不能简单地工作?

组合缩放和平移CGAffineTransform的动画不能简单地工作是因为这两种变换操作是基于不同的坐标系进行的。

CGAffineTransform是基于仿射变换的矩阵,它可以实现平移、缩放、旋转和倾斜等变换操作。在进行缩放和平移操作时,CGAffineTransform会分别应用于对象的缩放和平移,但是它们是基于对象自身的坐标系进行的。

当同时应用缩放和平移操作时,缩放操作会改变对象的大小,而平移操作会改变对象的位置。然而,由于缩放操作是基于对象自身的坐标系进行的,而平移操作是基于父容器的坐标系进行的,所以二者之间会产生冲突。

具体来说,当先应用缩放操作后再应用平移操作时,平移操作会受到缩放操作的影响,导致对象的位置发生偏移。同样地,当先应用平移操作后再应用缩放操作时,缩放操作会受到平移操作的影响,导致对象的大小发生变化。

为了解决这个问题,可以使用CATransform3D来代替CGAffineTransform进行变换操作。CATransform3D是基于3D变换的矩阵,它可以实现平移、缩放、旋转和倾斜等变换操作,并且可以保持变换操作的顺序。

另外,对于组合缩放和平移操作,还可以使用UIView的transform属性来实现。通过设置transform属性,可以同时应用缩放和平移操作,并且保持它们的顺序。

总结起来,组合缩放和平移CGAffineTransform的动画不能简单地工作是因为它们是基于不同的坐标系进行的操作,可以使用CATransform3D或UIView的transform属性来解决这个问题。

腾讯云相关产品和产品介绍链接地址:

  • CATransform3D:https://developer.apple.com/documentation/quartzcore/catransform3d
  • UIView的transform属性:https://developer.apple.com/documentation/uikit/uiview/1622459-transform
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS动画专题·UIView二维形变动画与CAAnimation核心动画(transform动画,基础,关键帧,组动画,路径动画,贝塞尔曲线)

其中,frame动画设置方式有限,必须确切制定形变前后frame,平移还好,特别是 旋转 时候,只能通过数学知识计算出新frame。这就得不偿失了。...(2) 一般在实际开发中都是平移,旋转,缩放组合使用。...,负责控制动画持续时间速度,是个抽象类,不能直接使用,应该使用它具体子类 3.3 CAAnimation类属性 带*号代表来自CAMediaTiming协议属性) *duration:动画持续时间...(渐进渐出):动画缓慢进入,中间加速,然后减速到达目的。...beginTime来控制组动画中每个动画触发时间,时间不能够超过动画时间,默认都为0.f */ //缩放动画 CAKeyframeAnimation *animation1

3.3K21

iOS开发之仿射变换示例总结

在之前博客中,我们聊过仿射变换东西,不过是使用放射变换来实现动画,关于该部分内容请移步于《iOS开发之各种动画各种页面切面效果》。...一、平移 接下来我们来看一下CGAffineTransform平移,在使用CGAffineTransform进行平移时候,我们要注意坐标系转换。...下方就是对ImageView平移效果。分别使用两个Slider来控制左右移动上下移动。具体运行效果如下所示。 ? 控制平移代码也是比较简单,如下所示。...二、缩放 聊完平移,接下来我我们来看一下仿射变换缩放。使用CGAffineTransform进行View缩放也是比较简单,下方就是对ImageView进行缩放运行效果。...在缩放过程中分为x方向上缩放y方向缩放。xy分别表示在x轴y轴上缩放倍数,如果x或者y为负数的话,那么将相应视图翻转后在进行缩放,运行效果如下所示。 ?

1.2K80
  • 浅汇-iOS 动画

    我们总是追求更为酷炫实现,如果足够仔细,我们不难发现一个好动画通过步骤分解后本质上不过是一个个简单动画实现。本文就个人搜集一些动画相关理论实践知识做个小结,不足之处请勿见怪。...基于UIView实现动画 简单Block动画 [UIView animateWithDuration:0.2 animations:^{  }]; [UIView animateWithDuration...kCATransitionFromLeft 从左侧进入 基础动画主要提供了对于CALayer对象中可变属性进行简单动画操作。...粒子动画 transform动画 transform是一个非常重要属性,它在矩阵变换层面上改变视图显示效果,完成旋转、形变、平移等等操作。在它被修改同时,视图frame也会被真实改变。...有两个数据类型用来表示transform,分别是CGAffineTransformCATransform3D。前者作用于UIView,后者为layer层次变换类型。

    86330

    iOS开发CoreAnimation解读之六——CATransform3D变换应用

    一些属性,这个属性改变,可以产生动画效果。...m12:m21一起决定z轴旋转 m13:m31一起决定y轴旋转 m14: m21:m12一起决定z轴旋转 m22:y轴方向进行缩放 m23:m32一起决定x轴旋转 m24: m31:...m13一起决定y轴旋转 m32:m23一起决定x轴旋转 m33:z轴方向进行缩放 m34:透视效果m34= -1/D,D越小,透视效果越明显,必须在有旋转效果前提下,才会看到透视效果 m41:x...轴方向进行平移 m42:y轴方向进行平移 m43:z轴方向进行平移 m44:初始为1 二、CATransform3D中属性方法 //初始化一个transform3D对象,不做任何变换 const CATransform3D...5、CATransform3D与CGAffineTransform转换         CGAffineTransform是UIKit框架中一个用于变换矩阵,其作用与CATransform类似,只是其可以直接作用于

    1.5K20

    动画| 3D空间变幻之CATransform3D使用

    随便说一句锚点位置很重要,经常会左右动画效果 CATransform3D有着与CGAffineTrans类似的一组API,但他们有个重要区别在于CATransform3D效果只能加在layer...3D仿射效果作用如下: 平移因子: m41(x位置) m42(y位置) m43(z位置) 缩放因子: m11(x位置) m22(y位置) 切变因子: m21(x位置) m12(y位置) 旋转因子:...对象 CATransform3D CATransform3DConcat (CATransform3D a, CATransform3D b); 1、平移变换 //返回一个平移变换transform3D...t, CGFloat tx, CGFloat ty, CGFloat tz); 2、缩放变换 //x,y,z分别对应x轴,y轴,z轴缩放比例 CATransform3D CATransform3DMakeScale...,比如阴影,可以收到很不错效果,当然CABaseAnmation结合使用,实现效果会异常强大。

    1.8K10

    iOS学习——核心动画之Layer基础

    CATransform3DMakeRotation(M_PI, 1, 0, 0); //平移 CATransform3DMakeTranslation(x,y,z) //缩放...当需要做一些快速缩放平移,二维旋转时用KVC。后面forKeyPath属性值不是乱写,苹果文档当中给了相关属性.      ...可以做一些简单动画,例如:平移,拉伸,旋转 一些比较高端动画,都是直接操作CALayer,可以制作3D动画 使用CALayer,可以直接操作显示东西,例如阴影,圆角,边框等 所以,对比CALayer...也就是说,CALayer不能处理用户触摸事件,而UIView可以。...= CATransform3DMakeRotation(angle2Rad(hourA), 0, 0, 1); } 10.3 将布局旋转进行组合 每过一秒,我们秒针就需要变化位置,所以我们我们需要设置一个定时器

    1.5K61

    UIView中frame属性内部实现

    除此之外,系统还提供一个transform属性来实现视图仿射变换: 比如平移缩放、旋转、倾斜效果。 在这四个属性中,除了frame属性是计算属性外,其他三个属性都是实体属性。...锚点-图片来源于核心动画编程指南 仿射变换 所谓仿射变换就是对一个坐标空间所有点进行一次线性变换并接上一个平移处理。iOS系统中视图属性transform就是用来实现对视图进行仿射变换处理。...,我们不能再通过设置frame属性值来修改视图位置尺寸了,否则最终展示效果未可知。...因此当对视图设置了仿射变换属性后,如果需要调整视图位置尺寸时我们需要操作是center属性bounds属性而不能在操作frame属性了。...同时这也解释了为什么通过AutoLayout设置约束后修改frame属性来改变位置尺寸不会起作用原因。

    1.5K30

    iOS动画系列之一:带时分秒指针时钟动画(上)1. 最终实现效果以及思维导图2. CALayer3. 隐式动画

    CATransform3D透视效果通过一个矩阵中一个很简单元素来控制:m34。...m34用于按比例缩放XY值来计算到底要离视角多远。” *Excerpt From: 钟声....m34(透视效果,要有旋转角度才能看出效果); CGFloat m41(x平移), m42(y平移), m43(z平移), m44; }; struct CGAffineTransform...修改这个属性会产生缩放动画 backgroundColor:用于设置CALayer背景色。修改这个属性会产生背景色渐变动画 position:用于设置CALayer位置。...修改这个属性会产生平移动画 3.2 关闭隐式动画 可以通过动画事务(CATransaction)关闭默认隐式动画效果 关闭或者修改隐式动画步骤: 开启动画事物 关闭动画效果或者修改动画事件 设置动画完成后动作

    2.1K30

    【IOS开发进阶系列】动画专题

    但是为什么iOS要基于UIViewCALayer提供两个平行层级关系呢?为什么不用一个简单层级来处理所有事情呢?原因在于要做职责分离,这样也能避免很多重复代码。...属性旋转了钟指针,但并没有解释背后运作原理,实际上UIViewtransform属性是一个CGAffineTransform类型,用于在二维空间做旋转,缩放平移。...斜切变换是放射变换第四种类型,较于平移,旋转缩放并不常用(这也是Core Graphics没有提供相应函数原因),但有些时候也会很有用。我们用一张图片可以很直接说明效果(图5.5)。...图5.6 对一个3D像素点做CATransform3D矩阵变换         CGAffineTransform矩阵类似,Core Animation提供了一系列方法用来创建和组合CATransform3D...3.CAAnimationGroup         Group也就是组合意思,就是把对这个Layer所有动画组合起来。

    50810

    Android属性动画完全解析(上),初识属性动画基本用法

    逐帧动画工作原理很简单,其实就是将一个完整动画拆分成一张张单独图片,然后再将它们连贯起来进行播放,类似于动画工作原理。...补间动画则是可以对View进行一系列动画操作,包括淡入淡出、缩放平移、旋转四种。...但是很显然,这些功能是不足以覆盖所有的场景,一旦我们需求超出了移动、缩放、旋转淡入淡出这四种对View操作,那么补间动画不能再帮我们忙了,也就是说它在功能可扩展方面都有相当大局限性,那么下面我们就来看看补间动画不能胜任场景...然后补间动画还有一个缺陷,就是它只能够实现移动、缩放、旋转淡入淡出这四种动画操作,那如果我们希望可以对View背景色进行动态改变呢?很遗憾,我们只能靠自己去实现了。...目前我们使用过了alpha、rotation、translationXscaleY这几个值,分别可以完成淡入淡出、旋转、水平移动、垂直缩放这几种动画,那么还有哪些值是可以使用呢?

    1.5K70

    高级 SwiftUI 动画 — Part 2:GeometryEffect

    就这么简单。请注意,这些变化将影响视图,但不会影响其祖先或后代布局。...在下面的例子中,我们将创建一个水平移动视图效果,但它也会在开始时倾斜,在结束时取消倾斜: 倾斜效果需要在动画第一个最后一个20%期间增加减少。在中间,倾斜效果将保持稳定。...完整代码可在本页面顶部链接gist文件中 实例6 获得。 动画反馈 在下一个例子中,我将向你展示一个简单技术,它将使我们视图对效果动画进展做出反应。...由于我们不能改变锚点,我们需要在组合中加入一些转换效果: struct FlipEffect: GeometryEffect { var animatableData: Double...我们用@Bindingd属性flipped来向视图报告,哪一面是面向用户。 在我们视图中,我们将使用flipped值来有条件显示两个视图中一个。

    1.3K30

    iOS手势与变形

    手势在用户交互中有着举足轻重作用,这篇文字简单介绍了iOS中手势,并通过手势对控件进行变形处理。...Tap手势类似,都是指定触发需要点击次数手指数量,但是LongPress手势numberOfTapsRequired是指定长按前需要点击次数。...若是你在长按时手指移动,该长按手势将会失败,allowableMovement设置你能容忍滑动范围,默认是10. 变形 ---- iOS变形指的是图片旋转、平移缩放。...这些变形可以上面介绍手势结合,完成许多变形操作。...缩放操作变动是构体中[a, b, c, d, tx, ty]ad,值变形系数Scale是相对应,大于1是放大,小于1是缩小。。 a是横向缩放, d是纵向缩放

    1.2K30

    iOS手势与变形

    手势在用户交互中有着举足轻重作用,这篇文字简单介绍了iOS中手势,并通过手势对控件进行变形处理。若有错误,或不同见解,请指正!...Tap手势类似,都是指定触发需要点击次数手指数量,但是LongPress手势numberOfTapsRequired是指定长按前需要点击次数。...若是你在长按时手指移动,该长按手势将会失败,allowableMovement设置你能容忍滑动范围,默认是10. 变形 ---- iOS变形指的是图片旋转、平移缩放。...这些变形可以上面介绍手势结合,完成许多变形操作。...缩放操作变动是构体中[a, b, c, d, tx, ty]ad,值变形系数Scale是相对应,大于1是放大,小于1是缩小。。 a是横向缩放, d是纵向缩放

    1.9K40

    Android动画入门教程之kotlin

    逐帧动画工作原理很简单,其实就是将一个完整动画拆分成一张张单独图片,然后再将它们连贯起来进行播放,类似于动画工作原理。...补间动画则是可以对View进行一系列动画操作,包括淡入淡出、缩放平移、旋转四种。...但是很显然,这些功能是不足以覆盖所有的场景,一旦我们需求超出了移动、缩放、旋转淡入淡出这四种对View操作,那么补间动画不能再帮我们忙了,也就是说它在功能可扩展方面都有相当大局限性,那么下面我们就来看看补间动画不能胜任场景...然后补间动画还有一个缺陷,就是它只能够实现移动、缩放、旋转淡入淡出这四种动画操作,那如果我们希望可以对View背景色进行动态改变呢?很遗憾,我们只能靠自己去实现了。...我们只需要告诉系统动画运行时长,需要执行哪种类型动画,以及动画初始值结束值,剩下工作就可以全部交给系统去完成了。

    95310

    抓住iOS未来 - 30天学习编写30个Swift小程序

    ,这做Push/Pop转场动画基本原理都是一样 这次动画参考了BubbleTransition动画效果,在它之上加了修改,支持传入自定义UI属性,方便做组合动画(例如本例中按钮不仅放大而且上下移动...- 最后当然是Animation动画执行逻辑了,可以通过UIViewanimate方法去实现。具体参数方法可以参考之前Project来进灵活组合。...imageMogr2/auto-orient/strip) #### 我学到了 - 本次涉及到最基本UIAnimation,很多复杂Animation其实是各种简单Animation叠加,所以不能轻视...是修改了UIViewtransform,传入要缩放相对比例并创建对应CGAffineTransform对象。...不过如果要用到缩放或者旋转动画,恐怕只能使用后者了。

    2.5K20

    iOS开发~UIView layer 之前关系

    三、图层层次结构 图层有很多通用方法属性,来操作子图层执行绘制操作。这些方法允许你将许多单个图层叠加在一起,来绘制一个组合屏幕图像。 一个图层可以有许多个子图层。...(45.0); backgroundView.layer.affineTransform =transform ; 七、图层动画 Quartz Core 能力远远不止一个简单画板式图层。...然后图层会调用Quartz Core,分支出一个新线程,负责动画全部图形处理工作。开发者秩序加入期望动画,就可以提升一个现有图层功能。...Quartz Core 框架内部还支持相当多其他转场效果,例如自然翻页缩放转场等,但是受到限制,只能有苹果自己应用程序使用。...iPhone 支持包括缩放、旋转、仿射、平移等。 变换实在单独图层上执行,因此多个变换可以在一个图层表面上同时进行。Quartz Core 框架用 CATransform3D 对象来执行变换。

    1.2K40
    领券