有没有办法为 iPad 上的表单启用视差?

Posted

技术标签:

【中文标题】有没有办法为 iPad 上的表单启用视差?【英文标题】:Is there a way to enable parallax for a Form Sheet on iPad? 【发布时间】:2014-03-26 01:15:07 【问题描述】:

感谢您的光临 :-)

我注意到在 iPad 上的表单视图没有任何 ios 7 视差效果,我实际上想加入它,因为我觉得它看起来很酷。

嗯,这就是我所拥有的,而它没有,那么有没有办法做到这一点?一个人会怎么做呢?我用谷歌搜索和谷歌搜索,谷歌终于让我失望了,因为没有出现任何合适的东西。

谢谢:)

【问题讨论】:

【参考方案1】:

这可以通过一些努力来完成。

首先,您需要知道如何为视图添加视差:

我为UIView 提供了以下分类方法以方便使用:

- (void)addDepthMotionX:(CGFloat)x y:(CGFloat)y 
    Class clazz = NSClassFromString(@"UIInterpolatingMotionEffect");
    if (clazz) 
        BOOL reverse = NO;
        if (CGAffineTransformEqualToTransform(self.transform, CGAffineTransformMakeRotation(-M_PI_2)) || CGAffineTransformEqualToTransform(self.transform, CGAffineTransformMakeRotation(M_PI_2))) 
            reverse = YES;
        

        UIInterpolatingMotionEffect *eff = [[clazz alloc] initWithKeyPath:@"center.x" type:reverse ? UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis : UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
        eff.maximumRelativeValue = @(x);
        eff.minimumRelativeValue = @(-x);
        [self addMotionEffect:eff];
        eff = [[clazz alloc] initWithKeyPath:@"center.y" type:reverse ? UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis : UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
        eff.maximumRelativeValue = @(y);
        eff.minimumRelativeValue = @(-y);
        [self addMotionEffect:eff];
    

代码受到保护,因此如果从 iOS 7(或更高版本)以外的版本调用它也不会崩溃。

现在只需将视差添加到视图中:

[someView addDepthMotionX:10 y:10]; // pick an appropriate depth value

您问题的最后一步是将其应用于您正在显示的视图控制器的根目录。

您可以在视图控制器的viewWillAppear: 方法中添加以下代码。调整以满足您的需求:

- (void)viewDidAppear:(BOOL)animated 
    [super viewDidAppear:animated];

    if (self.isBeingPresented || self.isMovingToParentViewController) 
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && self.modalPresentationStyle == UIModalPresentationFormSheet) 
            [self.navigationController.view.superview addDepthMotionX:15 y:15];
        
    

此代码的一个问题是,如果用户在表单显示后将 iPad 旋转 90 度,则需要更新视差效果。但这会让你开始。

【讨论】:

这真的很酷!哇!我明白你所说的 90 度是什么意思,幸运的是这是一个相当简单的解决方法 :-) 非常感谢!

以上是关于有没有办法为 iPad 上的表单启用视差?的主要内容,如果未能解决你的问题,请参考以下文章

html 解决iPhone和iPad上的视差问题 - 因为移动版也会在平板电脑上显示

移动 Safari 视差滚动不起作用

使用CSS和JavaScript创建基本的视差滚动效果

视差图后过滤

精灵上的无限滚动(视差)

利用视差图合成新视点