我可以对视图进行动画处理以从隐藏中淡入吗?



我正在尝试在初始视图加载后 5 秒后scrim视图控制器中的所有内容上淡入。这就是我现在所拥有的。

- (void)viewDidLoad {

[super viewDidLoad];
// Do any additional setup after loading the view.
[self setupAlarmPoll];
[self setupTimeLabel];
self.shouldRefresh = YES;
[self refreshSpotifyToken];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveNotification:)
name:@"backHome"
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveNotification:)
name:@"applicationDidEnterBackground"
object:nil];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5.0 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[UIView animateWithDuration:2.00 animations:^{
self.scrim.hidden = NO;
}];

});

但是,我没有得到逐渐淡入。视图刚刚出现。如何在 objective-c 中完成此动画?

视图的hidden属性不可进行动画处理。但是,alpha属性可动画的。您需要:

  1. 将字母设置为零
  2. 将隐藏设置为 false。
  3. 将 alpha 动画化为 1.0

通过这样做,可以使视图不再隐藏,而是完全透明。将 alpha 属性从 0.0 动画化到 1.0,使视图根据需要淡入。

代码如下所示:

self.scrim.alpha = 0;
self.scrim.hidden = NO;
[UIView animateWithDuration:2.00 
delay: 5.0
options: 0
animations:^{
self.scrim.alpha = 1.0;
}
completion: nil
];

(请注意,长格式的 animateWithDuration 采用延迟参数,因此您不必将其包装在对dispatch_after的调用中。

另外,你为什么要在Objective-C中进行新的开发?

是的,但它不是您要查找的isHidden,它是视图的alpha属性。你看,isHidden会直接声明某件事是否 100% 根本无法看到。因此,您无法对UIViewisHidden属性进行动画处理。但这就是alpha属性的用武之地,因为它旨在完全按照您的方式使用isHidden.alpha 属性确定UIView在屏幕上的淡入淡出程度。因此,如果alpha0,它是隐藏的。因此,如果您将视图的alpha设置为0则使用以下代码,您可以在视图中淡入:

// Swift
UIView.animate(withDuration: 0.25) { 
view.alpha = 1
}
// Objective-C
[UIView animateWithDuration:0.25 ^{
self.view.alpha = 1.0;
}];

要么像其他人提到的那样对alpha进行动画处理,要么将transitionWithViewUIViewAnimationOptionTransitionCrossDissolve一起使用:

- (void)viewDidLoad {
[super viewDidLoad];
self.scrim.hidden = true;
}
- (void)viewDidAppear:(BOOL)animated {
[UIView transitionWithView:self.scrim duration:2 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
self.scrim.hidden = false;
} completion:nil];
}

最新更新