ios中的图像翻译

ios中的图像翻译,ios,objective-c,Ios,Objective C,我不是一个很好的程序员,所以如果这是一个愚蠢的问题,请原谅我! 我只是在学习ios中的图像转换 我想在按钮点击事件中将图像从一个位置转换到另一个位置 这是代码 - (IBAction)showinfobybutton:(id)sender { CGFloat v1 = imageview.center.x; CGFloat v2 = imageview.center.y; CGAffineTransform trans = CGAffineTransformTransla

我不是一个很好的程序员,所以如果这是一个愚蠢的问题,请原谅我! 我只是在学习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函数设置了多少值,都不要在意。知道发生了什么事吗。。。。。 我累坏了
感谢您提供的任何帮助

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

  • 您是在
    init
    方法中还是在
    viewDidLoad
    中执行此操作?如果是这样,那可能在视图创建过程中为时过早,因为
    imageview
    的许多
    UIView
    相关属性(例如
    center
    )此时不可靠。查看并确保您获得的
    v1
    v2
    的非零值。如果要查看帧坐标等,可能需要将其延迟到
    viewdide出现
    或更高版本

  • 你在使用自动布局吗?打开故事板或NIB,查看文档属性(如下)。如果你在屏幕上移动东西,你可能想关掉它

  • 另外,基于
    imageview
    中心
    设置
    v1
    v2
    很奇怪。您正在移动
    中心
    ,移动量为
    中心
    。通常,您会看到如下内容:

    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
    code


  • 顺便说一下,如果要移动
    ui视图
    控件,如果不使用自动布局,最常用的方法是使用
    animationWithDuration
    更改
    中心
    ,例如:

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

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

    关于您关于
    CGAffineTransform
    的问题,有几点想法:

  • 您是在
    init
    方法中还是在
    viewDidLoad
    中执行此操作?如果是这样,那可能在视图创建过程中为时过早,因为
    imageview
    的许多
    UIView
    相关属性(例如
    center
    )此时不可靠。查看并确保您获得的
    v1
    v2
    的非零值。如果要查看帧坐标等,可能需要将其延迟到
    viewdide出现
    或更高版本

  • 你在使用自动布局吗?打开故事板或NIB,查看文档属性(如下)。如果你在屏幕上移动东西,你可能想关掉它

  • 另外,基于
    imageview
    中心
    设置
    v1
    v2
    很奇怪。您正在移动
    中心
    ,移动量为
    中心
    。通常,您会看到如下内容:

    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
    code


  • 顺便说一下,如果要移动
    ui视图
    控件,如果不使用自动布局,最常用的方法是使用
    animationWithDuration
    更改
    中心
    ,例如:

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

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

    刚才我在我的代码中发现,如果我将v1的值设置为非常高的值,比如465465746574547,那么它会在x方向上进行小的随机移动。刚才我在代码中发现,如果我将v1的值设置为非常高的值,比如465465746574547,那么它会在x方向上进行小的随机移动