2

UIView transitionFromView を使用して、2 つのビューを切り替えています。現在、UIView サブクラスで次のことを行っています。

UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img.png"]];

imgView.frame = CGRectMake(0, 0, 100, 100);

UIView *detailView = [[UIView alloc] initWithFrame:imgView.frame];
detailView.backgroundColor = [UIColor redColor];

detailView.frame = imgView.frame;

[self addSubview:imgView];

[UIView transitionFromView:imgView toView:detailView duration:1.0 
                   options:UIViewAnimationOptionTransitionFlipFromLeft
                completion:^(BOOL finished){

                }
 ]; 

これは期待どおりに機能します。トランジションは正常に実行されます。問題は、前のコードが含まれているビューのサブビューで遷移を行う必要があることです。だから、私はコンテナにすべてを入れて、それをアニメーション化しようとします:

UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img.png"]];

imgView.frame = CGRectMake(0, 0, 100, 100);

UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 500, 500)];
UIView *detailView = [[UIView alloc] initWithFrame:imgView.frame];
detailView.backgroundColor = [UIColor redColor];

detailView.frame = imgView.frame;

[container addSubview:imgView];

[self addSubview:container];

[UIView transitionFromView:imgView toView:detailView duration:1.0 
                   options:UIViewAnimationOptionTransitionFlipFromLeft
                completion:^(BOOL finished){

                }
 ]; 

ただし、この場合、アニメーションは実行されません。代わりに、トランジションのない最終結果のみが表示されます。2つのケースの違いを理解するのを手伝ってくれる人はいますか?

同じ問題がここで説明されていますが、既存の「解決策」がこの動作を完全に説明するには不十分だと思います。 transitionFromView と transitionWithView を使用したトランジション動作

4

2 に答える 2

1

dispatch_after と performSelector:withObject:afterDelay を使用して、アニメーションを別の実行ループに遅らせることを検討してください。

または、サブビューを追加した後に [CATransaction フラッシュ] を使用します

詳細については、http://andrewmarinov.com/working-with-uiviews-transition-animations/ をご覧ください。

于 2013-12-23T16:57:28.493 に答える
0

最初の方法が機能する理由はわかりませんが、これはこの方法を使用する正しい方法ではありません。遷移元のビューは階層から削除され、遷移先のビューはアニメーションの一部として追加されます。したがって、detailView の追加をスキップします (または、UIViewAnimationOptionShowHideTransitionViewsオプションを使用します。

于 2012-05-01T08:15:34.367 に答える