UIPicker的替代品

时间:2012-03-21 09:28:43

标签: iphone objective-c ios xcode uipickerview

SLOT-MACHINE应用程序还有其他方法吗?这是因为UIPICKER方法没有慢动画效果。

3 个答案:

答案 0 :(得分:3)

这可以使用CALayer动画完成。

您的主要slotMachineView图层的类需要CATransformLayer才能允许子图层的3D变换。

假设您有10个方形图像,代表卷轴上的符号。对于每张图片,请创建一个CALayer其内容属性是您的图片之一。然后到每一层你需要应用2个变换:

  • 首先,您需要围绕其X轴旋转每一层(2 * PI)/ 10
  • 然后翻译一些距离(你需要计算) Z轴。

现在将这些图层添加到视图的图层中。您现在应该看到围绕X轴获得图像的“圆柱”。

要旋转圆柱体,您需要调整第一个变换 - 使用CAAnimation或使用计时器,并通过计时器触发的偏移量调整X轴旋转。

我会留给你弄清楚完整的实现细节 - 但是这里有一些代码可以加载并创建一个初始的“卷轴”

    int imageCount = 16;

    for (int i = 0; i < imageCount; i++) {
        // Load image from the bundle

        NSString * fileName = [NSString stringWithFormat: @"Image-%d", i];
        NSString * filePath = [[NSBundle mainBundle] pathForResource: fileName ofType: @"jpeg"];

        UIImage * image = [UIImage imageWithContentsOfFile: filePath];

        // Create a layer with the image as content - My image size was 60x60

        CALayer * imageLayer = [CALayer layer];
        imageLayer.bounds = (CGRect){CGPointZero, {60.0, 60.0}};
        imageLayer.contents = (id)image.CGImage;
        imageLayer.position = (CGPoint){CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds)};

        // Set the initial image transform - I've hardcoded the translate along the
        // z-axis to 150, but this will vary depending on the number of images
        // and their size - you'll need to do some maths to work it out... sines or 
        // cosines or somesuch
        CGFloat angle = (2.0 * M_PI) / imageCount * i;
        CATransform3D transform = CATransform3DMakeRotation(angle, 1.0, 0.0, 0.0);
        transform = CATransform3DTranslate(transform, 0.0, 0.0, 150.0);  
        imageLayer.transform = transform;

        [self.layers addObject: imageLayer];

        [self.view.layer addSublayer: imageLayer];
    }
}

要旋转它,您需要做的就是更改变换的旋转部分。为了获得额外的功劳,您可以在离开中心时为图层添加增加的阴影。

答案 1 :(得分:2)

您可以对每个数字/符号使用UIImageView,并为您显示的图像的移动设置动画。使用UIPicker将限制为字母和数字;使用UIImageView,您可以添加其他典型的老虎机视觉效果,例如樱桃等。

答案 2 :(得分:2)

我们在做功课吗?

并排使用垂直UIScrollViews,启用分页,为视图使用UIImageViews。

默认情况下看起来会很平坦 - 但它在功能上是相同的。

你需要一些核心动画/核心图形才能让它看起来更像UIPickerView。