0

我正在尝试为我的应用程序添加一个短暂的延迟。它只是闪屏淡出,所以它不会影响应用程序中的任何其他功能(因为没有其他东西正在运行)。我尝试了各种方法都没有成功。(这发生在 viewController 的 viewDidLoad 中):

C's sleep: ... //添加启动画面 [self.view addSubview:splashScreen];

sleep(3);
[self fadeOut:splashScreen];

NSObject 的 performSelector(认为这会起作用,因为 UIViewController 不是从 NSObject 继承的吗?)

[self performSelector:@selector(fadeOut:) afterDelay:3];

NSTimeInterval:

 //wait 3 seconds
NSTimeInterval theTimeInterval = 3;
[self fadeOut:splashScreen withADelayOf:&theTimeInterval];

这是淡出(编写用于 NSTimeInterval 示例)

- (void) fadeOut:(UIView *)viewToToggle withADelayOf:(NSTimeInterval* ) animDelay {

[UIView setAnimationDelay:*animDelay];

[UIView animateWithDuration:0.25 animations:^{
    viewToToggle.alpha = 0.0;
}];

}

我得到了 fadeOut 但没有延迟。有人可以将我推向正确的方向。谢谢。

4

4 回答 4

3

你可以试试 dispatch_after 或 animateWithDuration:delay:options:animations:completion:

double delayInSeconds = 0.5;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
   //yourcode
});

或者

[UIView animateWithDuration:0.175 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
        //your code
    }completion:^(BOOL completed){
        //animation completion execution
}];
于 2012-10-01T17:48:36.200 回答
2

如果您想以一些延迟为视图的某些属性设置动画,则应该依赖此方法:

+(void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

在这里查看参考文档。

所以你的代码可能是这样的:

[UIView animateWithDuration:0.25 delay:3.0 options: UIViewAnimationOptionCurveLinear animations:^{
    viewToToggle.alpha = 0.0;
} completion: nil];
于 2012-10-01T17:49:58.880 回答
0

Tiguero 和 J2TheC 都为我指明了我需要去的确切方向:

这是我在其他人需要帮助时使用的代码:

//add the splash screen
[self.view addSubview:splashScreen];

//fade it out with a delay
[UIView animateWithDuration:0.75 delay:3.0 options:UIViewAnimationOptionCurveEaseIn
    animations:^{
        splashScreen.alpha = 0.0;
    }
    completion:^ (BOOL finished) {
        //do something on end
}];
于 2012-10-01T18:24:42.983 回答
-1

做一件事:在 Appdelegate 和 didfinishLunching 中创建一个 uiimageview 引用://此处不要将主视图控制器分配给 windwo。

{
img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"splash.png"]];

img.frame = CGRectMake(0, 0, 320, 480);

[self.window addSubview:img];

[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(removeSplash) userInfo:nil repeats:NO];
[self.window makeKeyAndVisible];


}



- (void)removeSplash{

    [img removerFromSuperview];
    self.window.rootViewController = self.viewController;



 }
于 2012-10-01T18:32:32.153 回答