iPhone卷曲左,右卷曲转变(iPhone Curl Left and Curl Right tr

2019-09-01 06:22发布

我在寻找一种方式做UIViewAnimationTransitionCurlUpUIViewAnimationTransitionCurlDown在iPhone上的过渡,但不是从上到下,做到这一点从左侧到右侧(或顶部/底部在横向模式下)。 我已经看到了这个和身边问互联网了几次,但没有SEMS得到答案。 不过,我觉得这是可行的。

我试图改变视角的变换和view.layer的变换,但没有影响的过渡。 由于过渡,当设备改变方向改变我相信有一种方法骗过使用在纵向模式景观过渡的设备,反之亦然?

Answer 1:

这可以通过使用容器视图做任何四个方向的卷发。 容器视图的转换设置为你想要的角度,然后通过添加视图容器视图,而不是你的应用程序的主视图不具有变换的帧做卷曲:

NSView* parent = viewController.view; // the main view
NSView* containerView = [[[UIView alloc] initWithFrame:parent.bounds] autorelease];
containerView.transform = CGAffineTransformMakeRotation(<your angle here, should probably be M_PI_2 * some integer>);
[parent addSubview:containerView]; 

[UIView beginAnimations:nil context:nil];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:containerView cache:YES];
[containerView addSubview:view];
[UIView commitAnimations];


Answer 2:

其实,我成功地实现通过改变我的UIViewController的方向这样的效果。 奇怪的是,我有我的控制器在另一个nesten当它不能正常工作,但是当我把他的直系视图控制器,它的工作。

,做它的代码:

在一个UIViewController这是在我的应用程序代理的主视图控制器,只允许横向(如下面的第二个方法看)我有以下几点:

-(void)goToPage:(int)page flipUp:(BOOL)flipUp {

     //do stuff...

     // start the animated transition
     [UIView beginAnimations:@"page transition" context:nil];
     [UIView setAnimationDuration:1.0];
     [UIView setAnimationTransition:flipUp ? UIViewAnimationTransitionCurlUp : UIViewAnimationTransitionCurlDown forView:self.view cache:YES];

     //insert your new subview
     //[self.view insertSubview:currentPage.view atIndex:self.view.subviews.count];

      // commit the transition animation
      [UIView commitAnimations];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}


Answer 3:

我也挣扎与此有关。 为了获得卷曲来自右侧或左侧,你可以创建一个中间视图和变换它。 所以,让我们说你转移(MyView的)的观点是主窗口(parentView)的孩子:

-parentView
-->myView

你会插入之间(在Interface Builder很容易做到)中间的看法:

-parentView
-->containerView
--->myView

然后,使用下面的代码以翻转容器左90度和转换视图90度右:

containerView.transform = CGAffineTransformMakeRotation(-M_PI_2);
myView.transform = CGAffineTransformMakeRotation(M_PI_2);

MyView的仍然会出现直立的用户,但该过渡将认为这是从左侧90度的应用。

请注意,这取决于如何自动缩放你的意见,你可能有应用该变换后,例如固定帧大小

  containerView.frame = CGRectMake(0.0, 0.0, 768.0, 1024.0);
  myWebView.frame = CGRectMake(0.0, 0.0, 768.0, 1024.0);

希望这可以帮助。 该是你可以得到UIViewAnimationTransitionCurlLeft和UIViewAnimationTransitionCurlRight最接近的一次。



Answer 4:

我试图FLUXA对iOS5的解决方案(所以我不得不使用[UIView的反式......]),但它没有工作:卷曲仍然上升或下降。 显然,过渡现在不采取变换角度的考虑。 所以,如果其他人想要做的iOS5同样的伎俩,解决的办法是增加另一个容器之间,并从那里设置过渡动画效果。

这里是我的代码,因为我想蜷缩“上”向左这是一个有点特殊,但与下角卷曲。 就好像我撕出一页笔记的书。

UIView* parent = self.view; // the main view
CGRect r = flipRectSize(parent.bounds);
UIView* containerView = [[UIView alloc] initWithFrame:r];
CGAffineTransform t = CGAffineTransformMakeRotation(-M_PI_2);
t = CGAffineTransformTranslate(t, -80, -80);
containerView.transform = CGAffineTransformScale(t, -1, 1);
[parent addSubview:containerView]; 

UIView* container2 = [[UIView alloc] initWithFrame:r];
[containerView addSubview:container2]; 

UIImageView* v = [[UIImageView alloc] initWithFrame:r];
v.image = [UIImage imageWithCGImage:contents.CGImage scale:contents.scale orientation:UIImageOrientationLeftMirrored];
[container2 addSubview:v];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [UIView transitionWithView:container2
                      duration:DURATION_CURL_ANIMATION
                       options:UIViewAnimationOptionTransitionCurlUp
                    animations:^{
                        [v removeFromSuperview];
                    } completion:^(BOOL finished) {
                        if (completion) {
                            completion(finished);
                        }
                        [containerView removeFromSuperview];}];});

笔记:

  1. 我必须承认,仿射变换翻译(80,80)没有意义在我的脑海里,但它是必要的iphone,可能不会在iPad上运行。
  2. flipSizeRect翻转矩形的宽度和高度(你已经得到了,对吧?)
  3. 该dispatch_after是必要的,因为我加入了容器,然后想删除从层次结构中的视图。 如果我离开了调度没有动画。 我最好的猜测是,我们首先需要让系统布局传递之前,我们可以动画移除。


Answer 5:

我不认为这是一个远远超出编写自定义动画。

更重要的是你可能不应该尝试它。 卷曲起来,卷曲下来是用户界面的语法,告诉一个观点被抬起或放下在现有视图中的一部分用户。 它应该像一个便条被放了下来,然后取出。 阿左< - >右卷曲将最有可能被解释为类似翻录页面出了一本书。 它会混淆用户。

当你发现自己想要做的东西接口,标准的API不容易做,你应该问问自己,这种新方法是否会一些重要的事情传达给用户,以及它是否类似于现有的接口语法。 如果没有,那么你不应该打扰。

不寻常的接口有一个初步的哇因素,但它们会导致挫折和在每天的日常使用错误。 他们还可能会导致苹果拒绝您的应用程序。



文章来源: iPhone Curl Left and Curl Right transitions