Ios 从viewDidLoad调用该方法时,Cabasicanization不起作用

Ios 从viewDidLoad调用该方法时,Cabasicanization不起作用,ios,cabasicanimation,performselector,Ios,Cabasicanimation,Performselector,我在视图中添加了一个imageView,该视图以modalViewController的形式显示,样式为水平翻转。 我添加了以下用于设置imageView动画的代码 - (void)animateTheImageview:(UIImageView*) imageViewToAnimate{        CABasicAnimation *fadeAnimation;    fadeAnimation = [CABasicAnimation animationWithKeyPath:@"o

我在视图中添加了一个imageView,该视图以modalViewController的形式显示,样式为水平翻转。 我添加了以下用于设置imageView动画的代码

- (void)animateTheImageview:(UIImageView*) imageViewToAnimate{
    
    CABasicAnimation *fadeAnimation;
    fadeAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
    fadeAnimation.duration = 1.5;
    fadeAnimation.repeatCount = INFINITY;
    fadeAnimation.autoreverses = NO;
    fadeAnimation.fromValue = [NSNumber numberWithFloat:1.0];
    fadeAnimation.toValue = [NSNumber numberWithFloat:0.5];
    fadeAnimation.removedOnCompletion = YES;
    fadeAnimation.fillMode = kCAFillModeForwards;
    [imageViewToAnimate.layer addAnimation:fadeAnimation forKey:@"animateOpacity"]; 
}


- (void)switchOnorOff
 {
    
    if (onOffSwitch.on)
    {
        
        self.lightImage.image = [UIImage imageNamed:@"CFLGlow.jpg"];
        [self animateTheImageview:self.lightImage];
    }
    else
    {
        
        self.lightImage.image = [UIImage imageNamed:@"CFL-BULB.jpg"];
        [self.lightImage.layer removeAllAnimations];
    }
}
我从
viewDidLoad
调用这个方法:

- (void)viewDidLoad
   {
      [self switchOnorOff];
   }
我的问题是上面的代码没有设置imageView的动画

- (void)animateTheImageview:(UIImageView*) imageViewToAnimate{
    
    CABasicAnimation *fadeAnimation;
    fadeAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
    fadeAnimation.duration = 1.5;
    fadeAnimation.repeatCount = INFINITY;
    fadeAnimation.autoreverses = NO;
    fadeAnimation.fromValue = [NSNumber numberWithFloat:1.0];
    fadeAnimation.toValue = [NSNumber numberWithFloat:0.5];
    fadeAnimation.removedOnCompletion = YES;
    fadeAnimation.fillMode = kCAFillModeForwards;
    [imageViewToAnimate.layer addAnimation:fadeAnimation forKey:@"animateOpacity"]; 
}


- (void)switchOnorOff
 {
    
    if (onOffSwitch.on)
    {
        
        self.lightImage.image = [UIImage imageNamed:@"CFLGlow.jpg"];
        [self animateTheImageview:self.lightImage];
    }
    else
    {
        
        self.lightImage.image = [UIImage imageNamed:@"CFL-BULB.jpg"];
        [self.lightImage.layer removeAllAnimations];
    }
}
但当我尝试以下代码时,它是有效的:

[self performSelectorOnMainThread:@selector(animateTheImageview:) withObject:self.lightImage waitUntilDone:YES];
我的问题是为什么会发生这个问题? 有什么区别吗?

[self-performSelectorOnMainThread:@selector(animateTheImageview:)with-object:self.lightImage waituntldone:YES]


[自动画图像视图:self.lightImage]

您不应该在viewDidLoad中执行任何动画,也不应该在其中调用[super viewDidLoad],因为您只是在覆盖它。 尝试在ViewWillDisplay或ViewDidDisplay上显示它

然后,根据,performSelectorOnMainThread:withObject:waitUntilDone:

在主线程的运行循环中将消息排队

因此,队列中的其他消息可能会在执行动画之前首先完成


希望这有帮助

您不应该在viewDidLoad中执行任何动画,也可以在其中调用[super viewDidLoad],因为您只是在覆盖它。 尝试在ViewWillDisplay或ViewDidDisplay上显示它

然后,根据,performSelectorOnMainThread:withObject:waitUntilDone:

在主线程的运行循环中将消息排队

因此,队列中的其他消息可能会在执行动画之前首先完成


希望这有帮助

谢谢,在pageViewController内的viewDidLoad中放置动画时遇到了相同的问题。谢谢,在pageViewController内的viewDidLoad中放置动画时遇到了相同的问题。