7

viewDidLoad と viewDidAppear にアニメーションを追加しようとしましたが、うまくいきません:

- (void)viewDidAppear:(BOOL)animated{
 [UIView beginAnimations:@"transition" context:NULL];
 [UIView setAnimationTransition:110 forView:self.view cache:YES];
 [UIView commitAnimations];
}

なんで?

4

3 に答える 3

24

私は同じ問題を抱えていて、このSOの質問で解決策を見つけたと思います。

viewDidAppearが呼び出されても、(名前にもかかわらず)画面には何も表示されませんが、もうすぐ表示されます。次に、performSelector:withDelayまたはNSTimerを使用してアニメーションを起動できます。遅延はわずか0.1にすることができ、画面が表示されたときにアニメーションが再生されます。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    NSLog(@"View did appear!");

    [self performSelector:@selector(animationCode) withObject:nil afterDelay:0.1f];
}

- (void)animationCode {
    // you animation code
}
于 2011-02-05T16:58:24.430 に答える
0
  1. あなたは正しく使用beginAnimations:していません。commitAnimationsそれらの間に、通常はアニメーション化されない何かを配置することになっています。たとえばself.view.alpha = 0.5、フェード効果が得られます。それらの間にないものには何の影響もありません。

  2. viewDidAppear:呼ばれるまでに、あなたの見解は、まあ... 現れました。何かをアニメ化するには遅すぎます。実際にやりたいことは次のようなものです。

    - (void)showMyViewWithAnimation {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationTransition:110 forView:childView cache:YES];
        [parentView addSubview:childView];
        [UIView commitAnimations];
    }
    

    上記の例でchildViewは、あなたの例では と呼ばれるものself.viewです。

  3. トランジションの名前を書き留めてください。それを見ても110が何であるかは誰にもわかりません。スタイル悪いよ。</ペダントリー>

于 2010-02-03T09:01:38.703 に答える
0

どの状態にアニメーション化する必要があるかをビューに伝えていないため、何もしません。beginAnimations:context:ビューの外観を変更するコードをとの間に配置する必要がありcommitAnimationsます (たとえば、1 つのサブビューを削除して別のサブビューを追加するなど)。

于 2010-02-02T23:57:14.560 に答える