0

私は、1つのViewControllerにこれらの動作を持つUISegmentControlがあるアプリに取り組んでいます:

セグメント 1 (まだ配置されていない場合):

  • フェードインアイテム
  • セグメント コントロールを下にスライド

セグメント 2 (まだ配置されていない場合):

  • フェードアウトアイテム
  • セグメント コントロールを上にスライド

セグメント 3 (まだ配置されていない場合):

  • まだ実装されていませんが、セグメント 2 に似ています

これを実現するために、次のコードを使用しています。

- (IBAction)segmentControlAction:(id)sender {
// Change which container will be visible
int selectedIndex = self.overviewSegmentControl.selectedSegmentIndex;

if (selectedIndex == 0) {
    // Show details and hide reviews & related
    self.detailContainer.hidden = NO;
    self.relatedContainer.hidden = YES;

    // SHOW THE DETAILS
    [self showDetails];
} else if (selectedIndex == 1) {
    // Show Reviews and hide details & related
    self.reviewsContainer.hidden = NO;
    self.relatedContainer.hidden = YES;

    // SHOW THE REVIEWS
    [self showOther];
} else if (selectedIndex == 2) {
    // Show related and hide details & reviews
    self.relatedContainer.hidden = NO;
    self.reviewsContainer.hidden = YES;
}
}

-(void)showOther {
// Animate the reviews
[UIView animateWithDuration:0.5 delay:0 usingSpringWithDamping:.9 initialSpringVelocity:1 options:UIViewAnimationOptionTransitionNone animations:^{
    // Hide details controls
    self.profileImageView.alpha = 0;
    self.seperatorImageView.alpha = 0;
    self.byLabel.alpha = 0;
    self.authorLabel.alpha = 0;

    // Move segmentControl
    [self.overviewSegmentControl setFrame:CGRectMake(self.overviewSegmentControl.frame.origin.x, self.previewImageView.frame.size.height + 8, self.overviewSegmentControl.frame.size.width, self.overviewSegmentControl.frame.size.height)];
}completion:^(BOOL finished) {
    // Completed
}];
}

-(void)showDetails{
// Animate the details
[UIView animateWithDuration:0.5 delay:0 usingSpringWithDamping:.9 initialSpringVelocity:1 options:UIViewAnimationOptionTransitionNone animations:^{
    // Move segmentControl
    [self.overviewSegmentControl setFrame:CGRectMake(self.overviewSegmentControl.frame.origin.x, self.previewImageView.frame.size.height + 85, self.overviewSegmentControl.frame.size.width, self.overviewSegmentControl.frame.size.height)];

    // Hide details controls
    self.profileImageView.alpha = 1;
    self.seperatorImageView.alpha = 1;
    self.byLabel.alpha = 1;
    self.authorLabel.alpha = 1;
}completion:^(BOOL finished) {
    // Completed
}];
}

2 番目のセグメントは完璧に機能します - いくつかのコントロールがフェードアウトし、セグメント コントロールが上にスライドします。ただし、1 番目のセグメントでは、セグメント 1 で発生するのと同じ素敵なアニメーションを実行する代わりに、セグメントが元に戻り、他のコントロールがすばやく視覚化されます。

なぜこれが起こるのか、どうすれば修正できるのでしょうか?

編集:

ビューコントローラー:

ここに画像の説明を入力

大きな UIImageView の下のコントロールは、セグメント コントロールがメインの UIImageView のすぐ下にスライドする間、フェードアウトするはずです。-(void)showDetails メソッドが呼び出された場合は逆です。

ありがとう!エリック

4

0 に答える 0