2

.nib ファイルからロードされる ViewController があります。viewDidLoad メソッドでサブビューを作成し、それをビュー階層に追加します。そのサブビューをフェードアウトして、.nib ファイルでビューを表示するにはどうすればよいですか?

(サブビューはスプラッシュ スクリーンのようなもので、フェード アウトしてビューを .nib に表示したいのですが、私にとって最も簡単な方法だったので、このように設定しました。)

これが私のコードの一部です(viewDidLoadのペン先から元のビューへの参照を設定しようとしましたが、動作させることができませんでした):

[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"View did load");
//set reference to view in .nib here
UIView *currentView = self.view;

CGRect frame = [[UIScreen mainScreen] bounds];
splashView = [[splashView alloc] initWithFrame:frame];
[[self view] addSubview:splashView];
//transition did not work

[UIView transitionFromView:splashView toView:currentView duration:0.25 options:UIViewAnimationOptionTransitionCrossDissolve completion:^(BOOL finished) {
    NSLog(@"transition finished");
}];

}

そのコードはクラッシュします。私は何を間違っていますか?

4

1 に答える 1

1

元のコードの代わりに次のことを試してください。

[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"View did load");

CGRect frame = [[UIScreen mainScreen] bounds];
splashView = [[splashView alloc] initWithFrame:frame];
[[self view] addSubview:splashView];
[self.view bringSubviewToFront: splashView];

[UIView animateWithDuration: 2.0
                     delyay: 0.5 // omit if you don't need a delay
                    options: UIViewAnimationCurveEaseOut // check the documentation for other options
                 animations: ^{ 
                    splashView.alpha = 0;
                 } 
                 completion: ^(BOOL finished) {
                    [splashView removeFromSuperView];
                 }];

ARC を使用しているかどうか、または絵コンテを使用しているかどうかはわかりません。ARC を使用していない場合は、このスニペットのメモリ管理が間違っています。

于 2012-12-06T07:40:09.780 に答える