我正在尝试在初始视图加载后 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
属性是可动画的。您需要:
- 将字母设置为零
- 将隐藏设置为 false。
- 将 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% 根本无法看到。因此,您无法对UIView
的isHidden
属性进行动画处理。但这就是alpha
属性的用武之地,因为它旨在完全按照您的方式使用isHidden
.alpha 属性确定UIView
在屏幕上的淡入淡出程度。因此,如果alpha
在0
,它是隐藏的。因此,如果您将视图的alpha
设置为0
则使用以下代码,您可以在视图中淡入:
// Swift
UIView.animate(withDuration: 0.25) {
view.alpha = 1
}
// Objective-C
[UIView animateWithDuration:0.25 ^{
self.view.alpha = 1.0;
}];
要么像其他人提到的那样对alpha
进行动画处理,要么将transitionWithView
与UIViewAnimationOptionTransitionCrossDissolve
一起使用:
- (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];
}