首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时光机风格导航

时光机风格导航
EN

Stack Overflow用户
提问于 2011-04-05 17:37:06
回答 3查看 1.2K关注 0票数 5

我最近一直在为iPhone做一些编程工作,现在我开始涉足iPad领域。我想实现的概念依赖于一种类似于osx中的时光机的导航。简而言之,我有许多可以平移和缩放的视图,就像任何普通视图一样。但是,视图是使用第三个维度(在本例中为深度)彼此堆叠的。在这种情况下,用户将通过挑选一个字母来导航到任何视图,于是应用程序将在视图中飞行,直到它到达所选字母的视图。

我的问题是:有人能给出如何做到这一点的完整的最终代码吗?开个玩笑。:)我需要的是朝着正确的方向推进,因为我甚至不确定如何开始这样做,以及使用现有的框架是否可能。任何建议都值得感谢。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-13 22:22:16

核心动画-或者更具体地说,构建在核心动画之上的UIView动画模型-是您的朋友。您可以通过将视图放置在父视图中的垂直线上(使用它们的center属性),让这条线上的视图比下面的(“前面”)稍微小一些(使用transform属性,使用CGAffineTransformMakeScale函数),并设置它们的层的z索引(使用视图的layer属性获取层,然后设置它的zPosition),从而使线上更远的层显示在其他层的后面,从而为视图创建一个类似于时间机器的界面。下面是一些示例代码。

代码语言:javascript
复制
// animate an array of views into a stack at an offset position (0 has the first view in the stack at the front; higher values move "into" the stack)
// took the shortcut here of not setting the views' layers' z-indices; this will work if the backmost views are added first, but otherwise you'll need to set the zPosition values before doing this
int offset = 0;
[UIView animateWithDuration:0.3 animations:^{
    CGFloat maxScale = 0.8; // frontmost visible view will be at 80% scale
    CGFloat minScale = 0.2; // farthest-back view will be at 40% scale
    CGFloat centerX = 160; // horizontal center
    CGFloat frontCenterY = 280; // vertical center of frontmost visible view
    CGFloat backCenterY = 80; // vertical center of farthest-back view
    for(int i = 0; i < [viewStack count]; i++)
    {
        float distance = (float)(i - offset) / [viewStack count];
        UIView *v = [viewStack objectAtIndex:i];
        v.transform = CGAffineTransformMakeScale(maxScale + (minScale - maxScale) * distance, maxScale + (minScale - maxScale) * distance);
        v.alpha = (i - offset > 0) ? (1 - distance) : 0; // views that have disappeared behind the screen get no opacity; views still visible fade as their distance increases
        v.center = CGPointMake(centerX, frontCenterY + (backCenterY - frontCenterY) * distance);
    }
}];

这是它的样子,有几个随机颜色的视图:

票数 5
EN

Stack Overflow用户

发布于 2011-04-13 21:42:59

你是说像这样的东西在右边吗?

如果是,这应该是可能的。您将不得不安排视图,如在图像上,并动画他们向前和向后。据我所知,目前还没有相关的框架。

票数 0
EN

Stack Overflow用户

发布于 2011-04-05 18:00:24

它被称为Cover Flow,在iTunes中也用来查看图片/相册。苹果似乎从第三方购买了这项技术,并为其申请了专利。然而,如果你在谷歌上搜索ios封面流程,你会得到大量的点击和代码,为你指明正确的方向。

我没有看过,但我认为它可能在iOS库中,但我不确定。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5549893

复制
相关文章

相似问题

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