感谢您的回复: - )
我注意到在iPad上,表单工作表视图没有任何iOS 7视差效果,我实际上想要合并它,因为我觉得它看起来很酷。
这就是我所拥有的而且它没有那个,所以有办法做到这一点吗?怎么会去做呢?我用谷歌搜索谷歌并谷歌最终让我失望,因为没有合适的东西出现。
谢谢:)
答案 0 :(得分:2)
这可以通过一些努力来完成。
首先,您需要知道如何将视差添加到视图中:
我为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度,则需要更新视差效果。但这会让你开始。