实现自定义动画以在iPad上显示指定视图的模态视图 [英] Implement custom animation to present modal view from specified view on iPad

查看:99
本文介绍了实现自定义动画以在iPad上显示指定视图的模态视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在iPad上,我们可以获得更多的工作空间,因此呈现全屏模态视图并不理想。

On the iPad we get much more room to work with, so presenting full screen modal views is not ideal.

我知道如何在新版本中呈现模态视图formSheet和close方法可以在这个问题上找到: iPad iTunes动画

I know how to present modal views in the new formSheet and a close approach can be found on this question: iPad iTunes Animation

问题在于你不能选择动画的来源,所以它只是默认并从中心出现,我想自定义它以便从特定位置出现。

The problem is that you cannot choose where the animation will come from, so it just defaults and appears from the center, I want to customize it so that it appears from a specific location.

我可以在此视频

如果有人能够使用代码,教程或文档指出我正确的方向,我会非常感激感谢它!

If anyone can point me on the right direction using code, tutorials or documentation I would greatly appreciate it!

更新:

经过一番调查后我发现可以使用图层和核心来完成动画第一部分;然后为formSheet模式视图设置动画,但我仍然不太明白如何实现它,希望你们能帮忙!

After some investigation I have found that this can be done using layers and Core Animation for the first part; and then animate it a formSheet modal view but I still dont quite understand how to achieve it, hopefully you guys can help!

推荐答案

我所做的是为UIViewController创建一个新类别,如下所示

What I did was creating a new category for UIViewController as follows

UIViewController + ShowModalFromView.h

#import <Foundation/Foundation.h>
#import <QuartzCore/QuartzCore.h>

@interface UIViewController (ShowModalFromView)

- (void)presentModalViewController:(UIViewController *)modalViewController fromView:(UIView *)view;

@end

UIViewController + ShowModalFromView.m

#import "UIViewController+ShowModalFromView.h"

@implementation UIViewController (ShowModalFromView)

- (void)presentModalViewController:(UIViewController *)modalViewController fromView:(UIView *)view
{
    modalViewController.modalPresentationStyle = UIModalPresentationFormSheet;

    // Add the modal viewController but don't animate it. We will handle the animation manually
    [self presentModalViewController:modalViewController animated:NO];

    // Remove the shadow. It causes weird artifacts while animating the view.
    CGColorRef originalShadowColor = modalViewController.view.superview.layer.shadowColor;
    modalViewController.view.superview.layer.shadowColor = [[UIColor clearColor] CGColor];

    // Save the original size of the viewController's view    
    CGRect originalFrame = modalViewController.view.superview.frame;

    // Set the frame to the one of the view we want to animate from
    modalViewController.view.superview.frame = view.frame;

    // Begin animation
    [UIView animateWithDuration:1.0f
                     animations:^{
                         // Set the original frame back
                         modalViewController.view.superview.frame = originalFrame;
                     }
                     completion:^(BOOL finished) {
                         // Set the original shadow color back after the animation has finished
                         modalViewController.view.superview.layer.shadowColor = originalShadowColor;
                     }];
}

@end

这很简单。如果这有助于你,请告诉我。

It's pretty straight forward. Please let me know if this helps you.

更新

我是更新了使用动画块的答案而不是 [UIView beginAnimations:nil context:nil]; / [UIView commitAnimations] 对。

I've updated the answer to use animation blocks instead of [UIView beginAnimations:nil context:nil]; / [UIView commitAnimations] pair.

这篇关于实现自定义动画以在iPad上显示指定视图的模态视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆