在我的iOS应用程序中,我使用UITouchGestureRecognizer来拖放、缩放和旋转UIImageView。我还将ImageView的最后位置信息存储下来,以便在应用程序重新启动时检索它。
这在iOS7上运行良好,但最近开始在iOS8上测试时遇到了一些问题,特别是缩放方面。每当imageview在旋转参数中具有非0角度时,缩放就不像预期的那样,并且会减小图像的大小。
我不明白为什么操作系统的更改会导致这种情况,以下是我的代码:
我猜我执行转换的方式有误,因为当我在
编辑: handleRotate的代码
这在iOS7上运行良好,但最近开始在iOS8上测试时遇到了一些问题,特别是缩放方面。每当imageview在旋转参数中具有非0角度时,缩放就不像预期的那样,并且会减小图像的大小。
我不明白为什么操作系统的更改会导致这种情况,以下是我的代码:
-(void) viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];
[self loadAllImages];
for (GIFavorite *favorite in self.favorites){
UIImage *image = favorite.image;
ImageView *imageView = [[ImageView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
imageView.center = CGPointMake(favorite.x, favorite.y);
imageView.transform = CGAffineTransformMakeRotation(favorite.rotation);
imageView.transform = CGAffineTransformScale(imageView.transform, favorite.scale, favorite.scale);
imageView.image = image;
imageView.userInteractionEnabled = YES;
UIPanGestureRecognizer * panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
panRecognizer.delegate = self;
[imageView addGestureRecognizer:panRecognizer];
UIRotationGestureRecognizer * rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotate:)];
rotationRecognizer.delegate = self;
[imageView addGestureRecognizer:rotationRecognizer];
UIPinchGestureRecognizer * pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
pinchRecognizer.delegate = self;
[imageView addGestureRecognizer:pinchRecognizer];
[self.view addSubview:imageView];
}
}
我猜我执行转换的方式有误,因为当我在
CGAffineTransformScale
之后加上CGAffineTransformMakeRotation
指令时,它会增大而不是减小尺寸。我做错了什么?编辑: handleRotate的代码
- (void)handleRotate:(UIRotationGestureRecognizer *)recognizer {
recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
ImageView *imageView = recognizer.view;
CGFloat radians = atan2f(imageView.transform.b, imageView.transform.a);
favorite.rotation = radians;
recognizer.rotation = 0;
}