我不是一个非常优秀的程序员,所以如果这是一个愚蠢的问题原谅我! 我只是在ios中学习图像转换 我想在按钮点击事件中将图像从一个位置转换为另一个位置 这是代码......
- (IBAction)showinfobybutton:(id)sender {
CGFloat v1 = imageview.center.x;
CGFloat v2 = imageview.center.y;
CGAffineTransform trans = CGAffineTransformTranslate(imageview.transform, v1, v2);
imageview.transform = trans;
}
代码有什么问题。它只能在y方向上转换而不是在x中转换。无论你为v1函数放多少值都不在乎。任何想法发生了什么..... 我完全被困了 感谢您的帮助
答案 0 :(得分:5)
关于CGAffineTransform
的问题,有几点想法:
您是使用init
方法还是viewDidLoad
执行此操作?如果是这样,那么在视图创建过程中可能为时过早,因为UIView
的许多imageview
相关属性(例如center
)在此时不可靠。请查看并确保v1
和v2
获得非零值。如果要查看帧坐标等,可能需要将其推迟到viewDidAppear
或更晚。
您使用的是自动布局吗?打开故事板或NIB并查看文档属性(如下所示)。如果你在屏幕上移动东西,你可能想关闭它。
另外,基于v1
v2
的{{1}}和center
设置很奇怪。您将imageview
移动了center
的数量。通常你会看到如下内容:
center
顺便说一下,我动画(a)因为这通常是更好的用户体验; (b)在进行这样的诊断时,我可以更容易地看到它正在变化的内容以及它正在变化的内容。如果您不想要动画,显然不要使用CGFloat dx = 100.0;
CGFloat dy = 200.0;
[UIView animateWithDuration:1.0
animations:^{
CGAffineTransform trans = CGAffineTransformTranslate(self.someView.transform, dx, dy);
imageview.transform = trans;
}];
代码。
顺便说一句,如果您要移动animateWithDuration
控件,如果您不使用自动布局,最常见的方法是使用UIView
更改animationWithDuration
或center
,例如:
frame
如果您正在使用自动布局,则该过程会稍微复杂一些。自动布局中的一种技术是以编程方式更改约束,但这可能超出了此问题的范围。