2

2つのサブビューのスーパービューとしてコンテナビューを使用しています。あるサブビューを別のサブビューに「反転」させたい。最初のサブビューはたまたま空白で、2番目のサブビューはUILabelテキストが含まれています。

フリップが発生していますが、サブビューが表示されません。

に移行blankLabelViewしたいlabelToTransition。何か案は?ありがとう!

コード:

-(void)viewDidLoad {
    CGRect labelFrame = CGRectMake(100.0, 217.0, 125.0, 34.0);

    self.labelContainerView = [[UIView alloc] initWithFrame:labelFrame];
    // If I change the background color to something other than clear
    // I can see that this view is flipping, otherwise it appears that
    // nothing happens.
    self.labelContainerView.backgroundColor = [UIColor clearColor];
    [self.someSuperview addSubview:self.labelContainerView];

    UILabel *label = [[UILabel alloc] initWithFrame:labelFrame];
    label.backgroundColor = [UIColor clearColor];
    label.lineBreakMode = UILineBreakModeWordWrap;
    label.numberOfLines = 2;
    label.textAlignment = UITextAlignmentCenter;
    self.labelToTransition = label;

    UIView *blankView = [[UIView alloc] initWithFrame:labelFrame];
    blankView.backgroundColor = [UIColor clearColor];
    self.blankLabelView = blankView;
}

-(void)viewWillAppear {
   self.labelToTransition.text = @"some text from a model object";

   [self.labelContainerView addSubview:self.blankLabelView];
}

-(void)flipViewAnimation {
    UIView *containerView = self.labelContainerView;

    [UIView transitionWithView:containerView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromBottom 
                animations:^{ 
                    [self.blankLabelView removeFromSuperview];
                    [containerView addSubview:self.labelToTransition];
                }
                completion:NULL];
}
4

3 に答える 3

3

のフレームがUILabel正しく設定されていない可能性があります

試す

CGRect labelFrame = CGRectMake(0, 0.0, 125.0, 34.0);

フリッピングの機能については、次のスニペットを試してください

-(void)LetUsFlip
{
[UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.0];  
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:flipContainerView cache:YES];

    if ([self.blankLabelView superview])
    {
        [self.blankLabelView removeFromSuperview];
        [self.labelContainerView addSubview:self.labelToTransition];
        [self.labelContainerView sendSubviewToBack:self.blankLabelView];
    }
    else
    {
        [self.labelToTransition removeFromSuperview];
        [self.labelContainerView addSubview:self.blankLabelView];
        [self.labelContainerView sendSubviewToBack:self.labelToTransition];
    }

    [UIView commitAnimations];
}
于 2012-01-09T10:22:32.767 に答える
1

viewDidLoadメソッドには

[self.someSuperview addSubview:self.labelContainerView];

あなたのviewWillAppearであなたは持っています

[self.labelContainerView addSubview:self.blankLabelView];

次に、アニメーションに

[self.blankLabelView removeFromSuperview];
[containerView addSubview:self.labelToTransition];

labelToTransition (label) not added to any view

私はこれまでこの遷移効果を使用したことがありませんが、ビュー階層を理解しようとしています。

最初は(viewDidLoadおよびviewWillAppear)somSuperView | __> labelToContainerView

labelContainerView
 |__>blankLabelView

次にアニメーションを通して

containerView == labelContainerView
 |__>labelToTransition (label)

blankLabelView no longer in a view

私が最初に言うことは、あなたのコードを追跡するのは非常に難しいということです。表示されているビューはどれですか?私たちはそれがそうであると仮定することになっていsomeSuperViewますか?ラベルがで終わるようにcontainerView見えます、それで多分それは目に見えるビューですか?あなたが書いたように、コードで何が起こっているのかは明確ではありません。

表示されている「メイン」ビューの名前と、移行前に表示されると予想されるサブビューで質問を更新できますか?次に、移行後に表示される「メイン」ビューとは何ですか。また、移行後に表示されると予想されるスーパービューは何ですか。

フリップが起こっていると言うとき、何かがフリップしているのが見えるかもしれませんが、それはあなたがフリップすることを期待しているビューではないかもしれませんか?これは、フリップ後にサブビューを表示できなくなったことを説明できますか?そして、なぜあなたは複数形のサブビューを見ることができないと言うのですか?私が読んだことは、あなたがあなたのフリップが終わった後にだけラベルを見ることを期待しているように聞こえます。

于 2012-01-09T06:20:22.397 に答える
0

あなたのコードでわかるように、あなたはすでに両方のサブビューをメインビューに追加しています。移行手順は問題なく、エラーなしで実行されます。あるビューを別のビューに遷移させたい場合は、最初のビューを削除してから、必要な遷移効果を持つ2番目のビューを追加してから、現在のビューをスーパービューから再度削除し、次のような機能が必要な場合は最初のビューを追加し直すことをお勧めします。交互に2つのビューを表示します。

于 2012-01-11T06:46:46.737 に答える