我有一个自定义UIImageView,我可以通过进行翻译将其拖动到屏幕上(xDif和yDif是手指移动的数量):
CGAffineTransform translate = CGAffineTransformMakeTranslation(xDif, yDif);
[self setTransform: CGAffineTransformConcat([self transform], translate)];
假设我在x和y方向上将ImageView移动了50px。然后我尝试使用:
旋转ImageView(通过手势识别器)CGAffineTransform transform = CGAffineTransformMakeRotation([recognizer rotation]);
myImageView.transform = transform;
ImageView突然移动到ImageView最初所在的位置(转换前 - 而不是移动位置+两个方向上的50px)。
(似乎无论我如何翻译视图,ImageView子类的self.center保持不变 - 它最初放在IB中的位置。)
另一个问题是,如果我将ImageView旋转30度,然后尝试再旋转一下,它将再次从原始位置(角度= 0)开始并从那里开始,为什么不启动它从30度而不是0度。
答案 0 :(得分:2)
您正在覆盖之前的转换。要添加到当前变换,您应该这样做 -
myImageView.transform = CGAffineTransformRotate(myImageView.transform, recognizer.rotation);
由于您要按顺序更改transform
属性,因此应使用CGAffineTransformRotate
,CGAffineTransformTranslate
和CGAffineTransformScale
代替,以便添加到原始转换中不要创建一个新的。