[英]rotating moving scaling of UIImageView moving inversly after rotating by 180*
Here is my code for moving,scaling and rotating the UI ImageView
all work fine but the issue is when we rotate the ImageView
it rotates but after then it move inversely like i am dragging toward right but the ImageView
is going left cant we get the current center point after rotating so that we when we drag the center points are of that rotated ImageView
not original one 这是我用于移动,缩放和旋转UI ImageView
代码,都可以正常工作,但是问题是当我们旋转ImageView
它旋转了,但是此后它却反向移动,就像我向右拖动但ImageView
向左移动,无法得到当前的旋转后的中心点,以便当我们拖动中心点时,该点是旋转的ImageView
而不是原始的
this is the custom class inherited by UIImageView
这是UIImageView
继承的自定义类
#pragma mark Manipulation
-(void)scale:(id)sender {
if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan)
{
_lastScale = 1.0;
}
CGFloat scale = 1.0 - (_lastScale - [(UIPinchGestureRecognizer*)sender scale]);
CGAffineTransform currentTransform = self.transform;
CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
[self setTransform:newTransform];
_lastScale = [(UIPinchGestureRecognizer*)sender scale];
[self showOverlayWithFrame:self.frame];
}
-(void)rotate:(id)sender {
if([(UIRotationGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
_lastRotation = 0.0;
return;
}
CGFloat rotation = 0.0 - (_lastRotation - [(UIRotationGestureRecognizer*)sender rotation]);
CGAffineTransform currentTransform = self.transform;
CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform,rotation);
[self setTransform:newTransform];
_lastRotation = [(UIRotationGestureRecognizer*)sender rotation];
[self showOverlayWithFrame:self.frame];
}
-(void)move:(id)sender {
CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self];
if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
_firstX = [self center].x;
_firstY = [self center].y;
}
translatedPoint = CGPointMake(_firstX+translatedPoint.x, _firstY+translatedPoint.y);
[self setCenter:translatedPoint];
[self showOverlayWithFrame:self.frame];
}
2 options: 2种选择:
CGAffineTransformTranslate
the same way you've been using Scale
and Rotate
. 使用CGAffineTransformTranslate
的方式与使用Scale
和Rotate
方式相同。 Try this code for option 2: 尝试将此代码用于选项2:
CGAffineTransform t = self.transform;
self.transform = CGAffineTransformIdentity;
[self setCenter:translatedPoint];
self.transform = t;
by changing this line in -(void)move:(id)sender just got my task done 通过在-(void)move:(id)sender中更改此行,我的任务就完成了
Older 较旧
CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self];
Correct 正确
CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:[self superview]];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.