翻转和替换 UIView

问题描述

我在视图控制器中添加一个 UIVIew 作为子视图,我试图将其翻转并替换为其他视图。

[UIView transitionFromView:self.testBlueTicket toView:self.testOrangeTicket duration:2 options:UIViewAnimationoptionTransitionFlipFromright completion:^(BOOL finished) {
        
}];

问题是整个视图控制器都在翻转,而不仅仅是我想要翻转和替换的特定视图。

搜索了文档,但没有找到任何特定的解决方案。任何建议将不胜感激。

解决方法

使用 [UIView transitionFromView... 动画超级视图。

因此,将您的 testBlueTickettestOrangeTicket 视图嵌入容器视图中。

这是一个简单的例子:

@interface FlipViewController ()

@property (strong,nonatomic) UIView *testBlueTicket;
@property (strong,nonatomic) UIView *testOrangeTicket;
@property (strong,nonatomic) UIView *containerView;

@end

@implementation FlipViewController

- (void)viewDidLoad {
    
    _containerView = [UIView new];
    _testBlueTicket = [UIView new];
    _testOrangeTicket = [UIView new];
    
    _containerView.translatesAutoresizingMaskIntoConstraints = NO;
    _testBlueTicket.translatesAutoresizingMaskIntoConstraints = NO;
    _testOrangeTicket.translatesAutoresizingMaskIntoConstraints = NO;
    
    _containerView.backgroundColor = [UIColor systemYellowColor];
    _testBlueTicket.backgroundColor = [UIColor systemBlueColor];
    _testOrangeTicket.backgroundColor = [UIColor systemOrangeColor];
    
    // respect safe area
    UILayoutGuide *g = [self.view safeAreaLayoutGuide];
    
    [_containerView addSubview:_testOrangeTicket];
    [_containerView addSubview:_testBlueTicket];
    
    [self.view addSubview:_containerView];
    
    [NSLayoutConstraint activateConstraints:@[
        
        [_containerView.widthAnchor constraintEqualToConstant:200.0],[_containerView.heightAnchor constraintEqualToConstant:260.0],[_containerView.centerXAnchor constraintEqualToAnchor:g.centerXAnchor],[_containerView.centerYAnchor constraintEqualToAnchor:g.centerYAnchor],[_testBlueTicket.widthAnchor constraintEqualToAnchor:_containerView.widthAnchor multiplier:1.0],[_testBlueTicket.heightAnchor constraintEqualToAnchor:_containerView.heightAnchor multiplier:1.0],[_testBlueTicket.centerXAnchor constraintEqualToAnchor:_containerView.centerXAnchor],[_testBlueTicket.centerYAnchor constraintEqualToAnchor:_containerView.centerYAnchor],[_testOrangeTicket.widthAnchor constraintEqualToAnchor:_containerView.widthAnchor multiplier:1.0],[_testOrangeTicket.heightAnchor constraintEqualToAnchor:_containerView.heightAnchor multiplier:1.0],[_testOrangeTicket.centerXAnchor constraintEqualToAnchor:_containerView.centerXAnchor],[_testOrangeTicket.centerYAnchor constraintEqualToAnchor:_containerView.centerYAnchor],]];
    
    _testOrangeTicket.hidden = YES;
    
    UITapGestureRecognizer *t = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTap)];
    [self.view addGestureRecognizer:t];
}

- (void)didTap {
    
    UIView *fromView = self.testBlueTicket.isHidden ? self.testOrangeTicket : self.testBlueTicket;
    UIView *toView = self.testBlueTicket.isHidden ? self.testBlueTicket : self.testOrangeTicket;

    [UIView transitionFromView:fromView
                        toView:toView
                      duration:2
                       options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews
                    completion:^(BOOL finished) {
        
    }];
    
}

@end

请注意,它使用 UIViewAnimationOptionShowHideTransitionViews,因此“票”视图保留在视图层次结构中。

要更清楚地看到事情,请更改工单视图上的一些约束(例如宽度和/或高度约束上的 multiplier:)...然后您将看到 .systemYellow 容器视图动画,嵌入了票证视图。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...