摘自 Ipad应用开发实践指南
- (void)setAngle:(CGFloat)angle{
CGPoint center = CGPointMake(CGRectGetMidX([self bounds]), CGRectGetMidY([self bounds]));
CGFloat radiusX = MIN([self bounds].size.width, [self bounds].size.height) * 0.35;
CGFloat radiusY = radiusX;
NSInteger cellCount = [[self dataSource] wheelViewNumberOfCells:self];
float angleToAdd = 360.0f / cellCount;
for (NSInteger index = 0; index < cellCount; index ++) {
XYWheelViewCell *cell = [[self dataSource] wheelView:self cellAtIndex:index];
if ([cell superview] == nil) {
[self addSubview:cell];
}
float angleInRadians = (angle + 180.0) * M_PI / 180.0f;
float xPosition = center.x + (radiusX * sinf(angleInRadians)) - (CGRectGetWidth([cell frame]) / 2);
float yPosition = center.y + (radiusY * cosf(angleInRadians)) - (CGRectGetHeight([cell frame]) / 2);
float scale = 0.75f + 0.25f * (cosf(angleInRadians) + 1.0);
if ([self style] == WheelViewStyleCarousel) {
[cell setTransform:CGAffineTransformScale(CGAffineTransformMakeTranslation(xPosition, yPosition), scale, scale)];
[cell setAlpha:(0.3f + 0.5f * (cosf(angleInRadians) + 1.0))];
}else{
[cell setTransform:CGAffineTransformMakeTranslation(xPosition, yPosition)];
[cell setAlpha:1.0];
}
[[cell layer] setZPosition:scale];
angle += angleToAdd;
}
}