UIView transitionWithView 带有多个xib文件的子视图

Posted

技术标签:

【中文标题】UIView transitionWithView 带有多个xib文件的子视图【英文标题】:UIView transitionWithView a subview with multiple xib files 【发布时间】:2011-11-27 03:33:59 【问题描述】:

我正在尝试在常规视图中创建子视图。当单击此子视图中包含的按钮时,它将翻转并显示一个新的子视图。这将是为了模拟一张牌在桌子上翻转。我有一个 DetailViewController 是一个空的 xib,但是当它加载时它会加载另一个名为 CardFrontViewController 的控制器,该控制器实际上包含所有包含在 xib 中的子视图(卡的正面)。一旦子视图中的按钮,它应该加载包含在 CardBackViewController xib 中的子视图。

DetailViewController 内部

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    if (!self.cardFrontViewController)
    
        self.cardFrontViewController = [[CardFrontViewController alloc] initWithNibName: @"CardFrontViewController" bundle: nil];
        [self.view addSubview: self.cardFrontViewController.view];
    

    [self configureView];

CardFrontViewController 内部

- (IBAction)flipToAnswerCard:(id)sender 

    if (!self.cardBackViewController)
    
        self.cardBackViewController = [[CardBackViewController alloc] initWithNibName: @"CardBackViewController" bundle: nil];
    

    [UIView transitionWithView: self.cardFrontContainerView
                      duration: 1.0
                       options: UIViewAnimationOptionTransitionFlipFromTop 
                    animations: ^ [self.cardFrontSubView removeFromSuperview];
                        [self.cardFrontContainerView addSubview: self.cardBackViewController.cardBackSubView]; 
                    completion: nil];

当我点击按钮翻转卡片时,卡片翻转,但是显示的视图是空的,这意味着self.cardBackViewController.cardBackSubView里面没有加载。 如果我在翻转卡方法中执行[self.cardFrontContainerView addSubview: self.cardBackViewController.view],它会在里面加载整个xib,但我真的只是想要一个里面的视图。我不确定在这里做什么。

【问题讨论】:

【参考方案1】:

如果您只想加载带有一些 IBOutlets 的视图,则不需要 UIViewController。

只需使用DetailViewController 中的[[NSBundle mainBundle] loadNibNamed:@"myViewNib" owner:self options:nil],如果存在对应于ne 'card' NIB 的IBOutlets,它们将自动链接(到所有者)。

如果您真的想要一个不同的类来处理这个“卡片”(并“拥有”IBOutlets),它是否一定需要从UIViewController 继承? NSObject 有时也是一个不错的候选人。

最后,如果你真的想嵌套 UIViewControllers,这只适用于 ios5。 为了支持以前的 iOS 版本,你最终必须手动调用一些 UIViewController 的生命周期方法(willAppear, didAppear...),将某些事件从你的主 UIViewController 传递给它的 detailViewController(比如willAnimateToRotation),也许还有一些其他技巧.

【讨论】:

我感觉我在尝试做一些比较简单的事情,只是一个视图可以使用两个xibs在一个视图中翻转到另一个视图,为什么这么复杂,为什么很难网上找资源?根据您的回答,我想做的似乎不是这样做的方法。 那就用 UIView 吧!你可以调用上面的方法 (loadNibNamed:) 来加载一个特定的 View 类,它有自己的 outlet【参考方案2】:

如果您只想在主视图中翻转子视图,可以在这里找到对我有用的答案:https://***.com/a/9028156/1319615

【讨论】:

以上是关于UIView transitionWithView 带有多个xib文件的子视图的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin 中使用 transitionWithView 设置 UIView.Hidden 属性时淡化动画

UIImage Cross Dissolve 不使用 UIView transitionWithView 制作动画

带有 UILabel 的 UIView transitionWithView 在过渡期间会丢失圆角

使用动画块之外的更改时,UIView transitionWithView 是平滑的

UIView transitionWithView 带有多个xib文件的子视图

transitionWithView 和 animateWithDuration 的问题