绘制自定义选取器轮

时间:2011-11-16 20:23:18

标签: objective-c ios ipad user-interface

我想创建一个可以加载一些对象(例如不同颜色)的轮子,用户可以“旋转”以查看其他颜色,如下所示:

Image sample here http://i44.tinypic.com/2uy0rqb.png

但我不知道从哪里开始。我希望能够加载尽可能多的颜色,然后在它们移入和移出可见视图窗口时排队/出列。经过一些研究,我得到的印象是使用UIScrollView是实现这一目标的方法吗?我将在该选项中进一步挖掘,但同时知道这是否是正确的方法或者是否完全错误以及还有其他/更好的方法会很好。

2 个答案:

答案 0 :(得分:5)

查看8月份发布的iDevBlogADay个帖子。 2011年9月:

您可能会发现它们对您要做的事情非常有用。

答案 1 :(得分:2)

在这种情况下,UIScrollView不会给你带来任何好处。它不会自动排队/出队(UITableView会),它只响应水平&垂直卷轴。开箱即用,您无法围绕轴旋转。

UIKit中没有任何东西可以帮助你,你可能想要从头开始使用UIView。

使用UIPanGestureRecognizer(拖动)和UISwipeGestureRecognizer来跟踪用户何时触摸旋转元素。 UIRotatationGestureRecognizer可能不是您想要的,因为它需要用户使用两根手指。

根据您使用此视图获得的复杂程度,您可以轻松完成:

view.transform = CGAffineTransformMakeRotation(someRadian);

根据x和x的距离计算旋转量(以弧度表示)。用户有药物。根据你想要得到的花哨程度,1像素x或y可以让你获得.1弧度旋转(我只是在猜测,你会想要玩它直到你获得正确的速度)。如果你想得到真正的幻想并让你的用户实际上是他们的手指,你会想要使用一些三角法将其转换为旋转量。

如果是滑动,请计算距离和距离。您希望视图旋转并将其包装在UIView动画中。

如果您发现这不起作用,您可能需要转到CALayer,这只是稍微复杂一点:

view.layer.transform = CATransform3DMakeRotation(someRadian, 0, 0, 1);

要设置动画,您需要创建一个CAAnimation:

CABasicAnimation *rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotate.fromValue = [NSNumber numberWithFloat:0];
rotate.toValue = [NSNumber numberWithFloat:someRadian];
rotate.duration = 2.0; // seconds
[view.layer addAnimation:rotate forKey:nil]; // "key" is optional

This可能会为您提供更多信息

对于添加/删除颜色,通过跟踪圆圈的旋转距离,您应该能够计算出要查看的颜色样本。但是,如果您愿意让有限数量的颜色让步,您可以简单地在界面生成器中使用所有颜色布局UIView,将其添加到根视图中,只有右侧角可见,然后将其旋转为如前所述,不必担心这一点。