在主视图上方翻转子视图

Posted

技术标签:

【中文标题】在主视图上方翻转子视图【英文标题】:Flipping Subviews above a main view 【发布时间】:2009-07-10 16:44:41 【问题描述】:

我正在尝试构建一个位于主视图上方的子视图,该子视图大约是主视图大小的 3/4。当按下按钮时,子视图应翻转到另一个子视图。我很接近,但有两个问题。

第一个问题是第一次按下翻转按钮时,第二个子视图以全屏开始并缩小到指定的帧大小而不是渲染任何翻转动画。

一旦第二个视图被渲染,我就可以在第一个和第二个视图之间切换(我添加了第二个按钮来返回以进行测试)。

我的第二个问题是,当视图翻转时,新视图在翻转之前加载,然后发生翻转。在此之前我已经构建了翻转视图,但只有在整个屏幕都是视图时才能正常工作。

这是我的主视图控制器中的代码:

- (void)viewDidLoad 

    Page1Controller *myPage1=[[Page1Controller alloc] initWithNibName:@"Page1Controller" bundle:nil];
    Page2Controller *myPage2=[[Page2Controller alloc] initWithNibName:@"Page2Controller" bundle:nil];
    self.page1 = myPage1;
    self.page2 = myPage2;
    [myPage1 release];
    [myPage2 release];
    [[page1 view] setFrame:CGRectMake(45, 40, 230, 280)];
    [[self view] addSubview:[page1 view]];

    [super viewDidLoad];

这是两个按钮的代码:

- (void)flipPressed:(id)sender 
    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:1.5];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:[page2 view] cache:YES];
    [page1.view removeFromSuperview];
    [[page2 view] setFrame:CGRectMake(45, 40, 230, 280)];
    [[self view] addSubview:[page2 view]];

    [UIView commitAnimations];



- (void)backFlipPressed:(id)sender 
    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:1.5];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:[page1 view] cache:YES];
    [page2.view removeFromSuperview];
    [[self view] addSubview:[page1 view]];
    [[page1 view] setFrame:CGRectMake(45, 40, 230, 280)];

    [UIView commitAnimations];

非常感谢对我的任何一个问题的任何帮助!

【问题讨论】:

【参考方案1】:

第一个问题:在beginAnimations之前设置视图的框架。

【讨论】:

谢谢 - 这解决了第二个子视图开始全屏并缩小的问题。视图仍然不会在第一次单击按钮时翻转,只会在随后的按钮单击时翻转。

以上是关于在主视图上方翻转子视图的主要内容,如果未能解决你的问题,请参考以下文章

每日一题1460. 通过翻转子数组使两个数组相等

LeetCode 1460. 通过翻转子数组使两个数组相等

1.8字符串- 翻转子串

快速翻转视图:整个屏幕翻转+点击手势的问题只工作两次

LeetCode 1460. 通过翻转子数组使两个数组相等 / 658. 找到 K 个最接近的元素 / 1464. 数组中两元素的最大乘积

LeetCode 1460. 通过翻转子数组使两个数组相等 / 658. 找到 K 个最接近的元素 / 1464. 数组中两元素的最大乘积