SLOT-MACHINE应用程序还有其他方法吗?这是因为UIPICKER方法没有慢动画效果。
答案 0 :(得分:3)
这可以使用CALayer
动画完成。
您的主要slotMachineView图层的类需要CATransformLayer
才能允许子图层的3D变换。
假设您有10个方形图像,代表卷轴上的符号。对于每张图片,请创建一个CALayer
其内容属性是您的图片之一。然后到每一层你需要应用2个变换:
现在将这些图层添加到视图的图层中。您现在应该看到围绕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。