UIImageView 在动画向右之前向左移动

Posted

技术标签:

【中文标题】UIImageView 在动画向右之前向左移动【英文标题】:UIImageView shifts left before animating to the right 【发布时间】:2015-07-11 17:31:20 【问题描述】:

这里是新手,

使用 .m 文件中的这段代码,我的目标是让 UIImageView 向右移动

@interface ViewController ()

@property (strong, nonatomic) IBOutlet UIImageView *myImageView;

@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [UIView animateWithDuration:1
                          delay:0
                        options:UIViewAnimationOptionCurveEaseInOut
                     animations:^
                         self.myImageView.center = CGPointMake(self.myImageView.center.x + 100, self.myImageView.center.y);
                     
                     completion:^(BOOL finished)

                     ];

但实际发生的是图像视图向左移动 100 点,然后向右移动 100 点回到其原始位置。我不知道为什么会这样。如何实现直接向右移动的动画?

注意:我不确定这是否与任何事情有关,但我在界面构建器中添加了约束以使 UIImageView 居中。

【问题讨论】:

如果您使用的是 AutoLayout - 而是更新约束以移动 imageView。这就是为什么它没有按照你的方式做 - 你正在与 AutoLayout 战斗并且它正在获胜。 @Tander 怎么可能做到这一点? 【参考方案1】:

为您想要更改的约束创建IBOutlets。就像您对任何其他 UIKit 元素所做的一样。然后在你的代码中而不是这样做:

self.myImageView.center = CGPointMake(self.myImageView.center.x + 100, self.myImageView.center.y);

做这样的事情:

self.imageViewTralingSpaceConstraint.constant = 100; //Or whatever value makes sense

然后在您的animateWithDuration 块中添加[self.view layoutSubViews];

【讨论】:

你能解释一下layoutSubviews是做什么的吗? 它强制所有视图、子视图更新到它们的新位置(如果它们的 X 和 Y 线或约束发生了变化) - 将它放在 animationBlock 中只会为你设置动画。【参考方案2】:

您可能希望将此代码放在您的 viewDidAppear 方法中,而不是您的 viewDidLoad 中。这将使动画在视图出现之后而不是之前发生。 viewDidLoad 方法是在视图层次结构加载到内存后调用的,但在所有布局后不一定要调用。

这里是 uiviewcontroller 参考的链接。 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/

在那里查看这两种方法。如果你继续做 iOS 开发,你会非常了解这些方法。

【讨论】:

以上是关于UIImageView 在动画向右之前向左移动的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIGestureRecognizer 沿 x 轴移动 UIImageView

9.21(动画)

当 NPC 向左或向右走时,如何使动画匹配?

UIImageView 动画从左到右

UIImage 从一个 UIImageView 移动到另一个 UIImageView 的动画

iPhone,Cocos2D - 在触摸屏时向左/向右移动精灵