0

我不是一个很好的程序员,所以如果这是一个愚蠢的问题,请原谅我!我只是在 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 函数赋予多少价值,都不在乎。知道发生了什么.....我完全被困住了谢谢你的帮助

4

1 回答 1

5

关于你的问题CGAffineTransform,有几个想法:

  1. 你是在init方法还是这样做viewDidLoad?如果是这样,那在视图创建过程中可能为时过早,因为(例如)的许多UIView相关属性在那个时候并不可靠。看一看,确保你得到 和 的非零值。如果您想查看帧坐标等,您可能希望将其推迟到或以后。imageviewcenterv1v2viewDidAppear

  2. 你在使用自动布局吗?打开故事板或 NIB 并查看文档属性(如下)。如果您在屏幕上移动东西,您可能需要将其关闭。

    在此处输入图像描述

  3. 顺便说一句,你的设置v1v2基于centerimageview是好奇的。您正在移动 的center数量center。通常你会看到如下内容:

    CGFloat dx = 100.0;
    CGFloat dy = 200.0;
    
    [UIView animateWithDuration:1.0
                     animations:^{
                         CGAffineTransform trans = CGAffineTransformTranslate(self.someView.transform, dx, dy);
                         imageview.transform = trans;
                     }];
    

    顺便说一句,我制作了 (a) 动画,因为这通常是更好的用户体验;(b) 在进行这样的诊断时,我可以更轻松地了解它的变化和变化。如果您不想要动画,显然不要使用animateWithDuration代码。


顺便说一句,如果你想移动一个UIView控件,如果你不使用自动布局,最常见的方法是使用animationWithDuration改变centerframe,例如:

[UIView animateWithDuration:1.0
                 animations:^{
                     imageview.center = CGPointMake(newX, newY); // set newX and newY to whatever you want
                 }];

如果您使用自动布局,则该过程会稍微复杂一些。自动布局中的一种技术是以编程方式更改约束,但这可能超出了这个问题的范围。

于 2013-02-06T14:32:49.350 回答