感谢您的出现:-)
我注意到 iPad 上的表单 View 没有任何 iOS 7 视差效果,实际上我想加入它,因为我觉得它看起来很酷。
嗯,这就是我所拥有的,但它没有,那么有没有办法做到这一点?一个人会怎么做呢?我用谷歌搜索了又搜索,但谷歌终于让我失望了,因为没有合适的东西出现。
谢谢:)
最佳答案
这可以通过一些努力来完成。
首先,您需要知道如何在一般情况下为 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/