ios - 有没有办法在 iPad 上为表单启用视差?

标签 ios ipad ios7 parallax

感谢您的出现:-)

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

No parallex effect *sad face*

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

谢谢:)

最佳答案

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

首先,您需要知道如何在一般情况下为 View 添加视差:

我有以下 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(或更高版本)以外的系统调用它不会崩溃。

现在要为 View 添加视差,您只需执行以下操作:

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

你的问题的最后一步是将它应用到你正在显示的 View Controller 的根。

您可以在 View Controller 的 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 度,则需要更新视差效果。但这会让您入门。

关于ios - 有没有办法在 iPad 上为表单启用视差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22649639/

相关文章:

javascript - iOS UIAutomation UIAElement.isVisible() 抛出陈旧的响应?

iphone - 即使应用程序仅为 iPhone 构建,是否会显示提供的 iPad 图标?

ios - func didTapAt 坐标没有显示任何东西

ios - 如何在带有重复的 animateWithDuration 的每个动画之间更改 UILabel 的文本?

ios - 将图像添加到ios工具栏的UIBarButtonItem

ios - 如何获取 UIViewController 的标题 UILabel

ios - 当 iOS 7 中出现键盘时,如何调整 UITextview 的大小

ios - 如何将按钮旋转回水平方向?

iphone - UICollectionView registerCell - 空白单元格

ios - 文本字段应该返回,这对 ios7 是否正确?