首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建精确的视差场景?

如何创建精确的视差场景?
EN

Stack Overflow用户
提问于 2014-08-23 20:59:19
回答 1查看 75关注 0票数 0

我创建了一个UIView类的扩展,以便在整个项目中实现视差效果。我会建议你做同样的事情,这要容易得多。

代码语言:javascript
复制
#pragma mark - Handling Effects

- (void)setMotion:(CGFloat)motion
{
    if (motion == 0) {

        for (UIMotionEffect *motionEffect in self.motionEffects) {

            [self removeMotionEffect:motionEffect];
        }
    }
    else {

        UIInterpolatingMotionEffect *horizontalEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
        horizontalEffect.minimumRelativeValue = @(motion);
        horizontalEffect.maximumRelativeValue = @(-motion);

        UIInterpolatingMotionEffect *verticalEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
        verticalEffect.minimumRelativeValue = @(motion);
        verticalEffect.maximumRelativeValue = @(-motion);

        [self addMotionEffect:horizontalEffect];
        [self addMotionEffect:verticalEffect];
    }
}

- (CGFloat)motion
{
    if (self.motionEffects.count == 0) {

        return 0;
    }
    else {

        UIInterpolatingMotionEffect *horizontalEffect = (UIInterpolatingMotionEffect *)[self.motionEffects objectAtIndex:0];

        return [horizontalEffect.minimumRelativeValue floatValue];
    }
}

示例:

代码语言:javascript
复制
view1.motion = 10;
view2.motion = 15;
view3.motion = 20;

是的,它看起来像视差,但我没有强烈的感觉,我出现在3D场景中。

有没有办法,我可以计算视差运动(.motion)的UIView基于它的大小?我在猜测角度大小和视点,但我不知道这些是如何测量的……

EN

回答 1

Stack Overflow用户

发布于 2014-08-24 02:50:51

此公式描述了对象相对于放置距离的大小:

代码语言:javascript
复制
angularSize = realSize / distance;

通过实现您自己的初始化方法:

代码语言:javascript
复制
- (instancetype)initWithRealSize:(CGSize)realSize;

您可以通过调整视图的距离来更改视图的大小。

运动值可以按如下方式计算:

代码语言:javascript
复制
horizontalMotion = angularSize.width / 10.0;

verticalMotion = angularSize.height / 10.0;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25462173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档