gpt4 book ai didi

ios - 为什么 UIInterpolatingMotionEffect 不改变 UIView 的框架?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:04:22 25 4
gpt4 key购买 nike

我使用在另一个问题中找到的这个函数将视差效果应用于 View :

const static CGFloat kCustomIOS7MotionEffectExtent = 10.0;

- (void)applyMotionEffects:(UIView *)YOUR_VIEW
{
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
return;
}
UIInterpolatingMotionEffect *horizontalEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x"
type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
horizontalEffect.minimumRelativeValue = @(-kCustomIOS7MotionEffectExtent);
horizontalEffect.maximumRelativeValue = @( kCustomIOS7MotionEffectExtent);
UIInterpolatingMotionEffect *verticalEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y"
type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
verticalEffect.minimumRelativeValue = @(-kCustomIOS7MotionEffectExtent);
verticalEffect.maximumRelativeValue = @( kCustomIOS7MotionEffectExtent);
UIMotionEffectGroup *motionEffectGroup = [[UIMotionEffectGroup alloc] init];
motionEffectGroup.motionEffects = @[horizontalEffect, verticalEffect];
[YOUR_VIEW addMotionEffect:motionEffectGroup];
}

它工作正常,但在记录 View 的框架后我注意到它没有改变。他们是怎么做到的?有什么特别的原因吗?它使继续开发变得容易得多,但这没有意义,因为实际的 View 位置会随着视差效果的发生而改变。

最佳答案

我相信这是因为与大多数动画一样,UIInterpolatingMotionEffect 使用 View 的(模型层)的presentationLayer 来执行它的操作动画。这些属性通常在动画实际完成后应用到模型层(在这种情况下,完成实际上只是在运动效果结束时将其放回起始位置,因此实际模型层永远不会改变)。

尝试检查表示层的属性。

CALayer *presentationLayer = [myView.layer presentationLayer];

CGRect frame = presentationLayer.frame;
CGPoint position = presentationLayer.position;

关于ios - 为什么 UIInterpolatingMotionEffect 不改变 UIView 的框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24715330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com