我正在开发一个应用程序,需要处理图像视图,包括旋转、缩放、移动等操作,并将其保存在核心数据模型中,在需要时进行恢复。
旋转和缩放是通过手势识别器实现的。我在这里阅读到,变换后不能使用图像视图框架来检索真实矩形,而必须使用边界和中心。
我尝试了几种组合保存/恢复视图框架、视图层框架、视图边界、视图层边界,但都没有成功。这是我的最佳方法,但如果旋转角度不为0(角度值越高,恢复的图像大小就越大),则恢复的imageview会更大。
我知道存储框架值并在恢复边界时使用它们是不一致的,但我正在使用这种“最佳”结果。
以下是用于保存图像视图设置的代码:
这是用来恢复图像视图设置的代码:
我会为图像视图层应用一个蓝色的边框作为辅助。方向和位置都一样,但在恢复之后形状是正方形,而在保存之前是长方形。
如果需要更多代码来澄清,请告诉我。欢迎提供提示。
非常感谢你。
旋转和缩放是通过手势识别器实现的。我在这里阅读到,变换后不能使用图像视图框架来检索真实矩形,而必须使用边界和中心。
我尝试了几种组合保存/恢复视图框架、视图层框架、视图边界、视图层边界,但都没有成功。这是我的最佳方法,但如果旋转角度不为0(角度值越高,恢复的图像大小就越大),则恢复的imageview会更大。
我知道存储框架值并在恢复边界时使用它们是不一致的,但我正在使用这种“最佳”结果。
以下是用于保存图像视图设置的代码:
- (void)updateModelCoords {
CGFloat angle = atan2f(myImageView.transform.b, myImageView.transform.b);
CGRect frame = [myImageView.layer frame];
[myModel setW:[[NSNumber alloc] initWithFloat:frame.size.width]];
[myModel setH:[[NSNumber alloc] initWithFloat:frame.size.height]];
[myModel setX:[[NSNumber alloc] initWithFloat:frame.origin.x]];
[myModel setY:[[NSNumber alloc] initWithFloat:frame.origin.y]];
[myModel setCenterX:[[NSNumber alloc] initWithFloat:[myImageView center].x]];
[myModel setCenterY:[[NSNumber alloc] initWithFloat:[myImageView center].y]];
[myModel setAngle:[[NSNumber alloc] initWithFloat:angle]];
// db save stuff...
}
这是用来恢复图像视图设置的代码:
- (void) restoreImage {
float angle = [[myModel angle] floatValue];
CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
myImageView.transform = transform;
CGRect bounds = [myImageView.layer bounds];
bounds.size.width = [[myModel w] floatValue];
bounds.size.height = [[myModel h] floatValue];
bounds.origin.x = [[myModel x] floatValue];
bounds.origin.y = [[myModel y] floatValue];
[myImageView.layer setBounds:bounds];
CGPoint center = CGPointMake([[myModel centerX] floatValue], [[myModel centerY] floatValue]);
[myImageView setCenter:center];
}
我会为图像视图层应用一个蓝色的边框作为辅助。方向和位置都一样,但在恢复之后形状是正方形,而在保存之前是长方形。
如果需要更多代码来澄清,请告诉我。欢迎提供提示。
非常感谢你。