iOS animationWithDuration链接第一个动画不是';t显示

iOS animationWithDuration链接第一个动画不是';t显示,ios,objective-c,animatewithduration,Ios,Objective C,Animatewithduration,我有两个动画,其中一个调用另一个,但只有后一个才真正发生。我不确定这个问题是否存在。我是iOS新手。我试着让它向上然后向下,但只有向下发生 另外,如果我将调用从[self animatedup]更改为[self animateDown],则不会发生动画 -(void)viewDidLoad { [super viewDidLoad]; [self.containerView addSubview:self.logoView = ({ UIImageView *im

我有两个动画,其中一个调用另一个,但只有后一个才真正发生。我不确定这个问题是否存在。我是iOS新手。我试着让它向上然后向下,但只有向下发生

另外,如果我将调用从
[self animatedup]
更改为
[self animateDown]
,则不会发生动画

-(void)viewDidLoad
{
    [super viewDidLoad];
    [self.containerView addSubview:self.logoView = ({
        UIImageView *imageView = [UIImageView new];
        imageView.contentMode = UIViewContentModeScaleAspectFit;
        imageView.image = [UIImage imageNamed:@"thisImage"];
        imageView;
    })];
    [self animateUp];
}

- (void)animateUp
{
    [UIView animateWithDuration:1 animations:^{
        CGRect newFrame = CGRectMake(self.logoView.frame.origin.x, self.logoView.frame.origin.y - 40, self.logoView.frame.size.width, self.logoView.frame.size.height);
        self.logoView.frame = newFrame;
    } completion:^(BOOL finished) {
        [self animateDown];
    }];
}

- (void)animateDown
{
    [UIView animateWithDuration:1 animations:^{
        CGRect newFrame = CGRectMake(self.logoView.frame.origin.x, self.logoView.frame.origin.y + 40, self.logoView.frame.size.width, self.logoView.frame.size.height);
    self.logoView.frame = newFrame;
    } completion:nil ];
}

animateUp
的调用发生在ImageView设置初始帧之前。您可以将此操作推迟到
viewdide出现
viewdidelayoutsubviews
,并且应该可以正确看到动画的出现

-(void)viewDidLoad
{
    [super viewDidLoad];
    [self.containerView addSubview:self.logoView = ({
        UIImageView *imageView = [UIImageView new];
        imageView.contentMode = UIViewContentModeScaleAspectFit;
        imageView.image = [UIImage imageNamed:@"thisImage"];
        imageView;
    })];
}

- (void) viewDidLayoutSubviews
{
    [self animateUp];    // at this point the ImageView has its frame set
}

请注意,ViewDidDisplay和viewDidLayoutSubviews在UIViewController的生命周期内可能会被多次调用,因此,如果您只希望动画出现一次,您需要适应这种情况。

您可以在调用
animateUp
的地方显示其他代码吗?您的代码对我有效,可能你调用animateUp方法的方式不好。我只在这里调用它,并且我添加了logoView声明。@user3338275 logoView的框架设置如何?是否使用约束?如果将对animateUp的调用从viewDidLoad移动到ViewDidDisplay,会发生什么情况?如果我需要一次,一次调度就足够了吗?一次调度就可以了,但如果该视图控制器消失并重新实例化,视图将不会再次设置动画