我有以下情况,我正在尝试制作照片编辑器,我需要对围绕视图中心的图像进行缩放,平移和旋转操作
问题是,如果我在90度翻译后应用翻译,则翻译为翻译顶部且翻译后锚点不是视图的中心
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
// ImageView
v = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 768, 500)];
[v setBackgroundColor:[UIColor redColor]];
// ImageView's Image
UIImage *img = [UIImage imageNamed:@"_my.jpg"];
[v setImage:img];
v.contentMode = UIViewContentModeScaleAspectFit;
v.layer.anchorPoint = CGPointMake(0.5, 0.5);
[self.view setBackgroundColor:[UIColor clearColor]];
// UiView containing ImageView
vc = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 768, 500)];
[vc addSubview:v];
[self.view addSubview:vc];
}
- (IBAction)Click:(id)sender {
// Translate
if ([sender tag] == 1) {
CGAffineTransform t0 = v.transform;
CGAffineTransform t1 = CGAffineTransformTranslate(t0, 10.0, 0.0);
v.transform = t1;
}
// Rotate
if ([sender tag] == 2) {
CGAffineTransform t0 = v.transform;
CGAffineTransform t1 = CGAffineTransformRotate(t0, DEGREES_TO_RADIANS(10));
v.transform = t1;
}
}
有谁知道如何将视角作为定位点并在旋转后平移才能正常工作?
TX
答案 0 :(得分:0)
原点转换
但是,特别是在2D中,您经常需要在转换中添加原点位移。这通常被添加到开始,也必须否定,所以:
//带原点的世界矩阵
-OriginTranslation * Scale * Rotation * PositionTranslation
同样的事情也可以用视图矩阵完成,但是你把它添加到最后,这次你不要否定它:
//查看带原点的矩阵
-PositionTranslation * -Rotation * Zoom * OriginTranslation
选择性原点的转换
在某些情况下,您希望拥有原点位移,但您希望它仅影响您的比例和旋转,而不是您的翻译。处理它的方法是在到达转换组件之前撤消原始转换。例如,使用世界矩阵:
我完全不记得转换如何应用于视图,其中一个应该是可行的。
//具有缩放和旋转原点的世界矩阵
-OriginTranslation * Scale * Rotation * OriginTranslation * PositionTranslation
视图矩阵:
//查看带原点的矩阵
-PositionTranslation * -OriginTranslation * -Rotation * Zoom * OriginTranslation
没有原点的转换示例,顺序:缩放*旋转*转换