Ale*_*dre 12 objective-c cgaffinetransform ios
所以我需要对视图应用一些缩放和一些旋转(我使用手势执行此操作),因此对于每个手势,我更新当前的scalling和rotation值,例如:
self.scaleWidth *= gesture.scale; //When I detect an horizontal pinch
self.scaleHeight *= gesture.scale; //When I detect a vertical pinch
self.rotationAngle += gesture.rotationAngle; //When I detect a rotation
Run Code Online (Sandbox Code Playgroud)
然后我执行以下操作来转换视图:
CGAffineTransform transform = CGAffineTransformScale(CGAffineTransformIdentity, self.scaleWidth, self.scaleHeight);
self.theSubViewToTransform.transform = CGAffineTransformRotate(transform, self.rotationAngle);
Run Code Online (Sandbox Code Playgroud)
当我只进行缩放时,它工作正常.当我进行缩放然后旋转时,它旋转正常.旋转后,我尝试再次缩放,它不能正常工作:应用缩放比如旋转后完成,使我的图像结构变形.
我以为我做了需要做的事情以避免这种情况:每次从身份变换开始,先缩放然后旋转,但显然我错了......
有人知道我的实施有什么问题吗?
谢谢
RPe*_*eck 12
如果每次都以身份变换开始,则设置子视图变换的最终结果将仅包括当前手势的缩放和旋转.不是从身份开始,而是从视图的当前变换开始.
CGAffineTransform transform = self.theSubViewToTransform.transform;
transform = CGAffineTransformScale(transform, self.scaleWidth, self.scaleHeight);
transform = CGAffineTransformRotate(transform, self.rotationAngle);
self.theSubViewToTransform.transform = transform;
Run Code Online (Sandbox Code Playgroud)
第一次执行时,转换将以身份转换开始.在随后的执行中,它将在旧的更改之上进行新的更改.
对于SWIFT 3:
view.transform = CGAffineTransform(rotationAngle: CGFloat.pi).concatenating(CGAffineTransform(scaleX: 0.4, y: 0.4))
Run Code Online (Sandbox Code Playgroud)