我必须在图片中显示如下菜单:
这个按钮可以在中心的cercle周围移动,类似于3D效果,这意味着你可以在移动时看到尺寸变换。
我记得iCarroussel项目可以做这样的事情,任何pne引导我到提供这个动画的正确控制吗?
感谢。
EDIT1:
好的,我能够看到iCarousel几乎是我需要的,但是如何改变旋转木马的垂直角度才能像第一张照片一样?看看iCarousel是如何默认的。
答案 0 :(得分:1)
您需要做的是以下(步骤如下所示)
下载iCarousel ......
在Tests / ARC iOS下打开示例项目(打开iCarouselExample.xcodeproj)
将默认设置为“Cylinder”而不是“Coverflow”(在iCarouselExampleViewController.m的viewDidLoad函数中)
- (void)viewDidLoad
{
[super viewDidLoad];
carousel.type = iCarouselTypeCylinder;
navItem.title = @"Cylinder";
}
由于您的自定义轮播中只需要六个项目,因此在iCarouselExampleViewContoller.h中设置了“窗格数”...
//NOTE!
#define NUMBER_OF_ITEMS 6
使用此NUMBER_OF_ITEMS设置轮播(即在iCarouselExampleViewContoller.m中更改设置功能,如下所示(使用'wrap',如图所示)
- (void)setUp
{
//set up data
wrap = YES;
self.items = [NSMutableArray array];
//NOTE! use preset number of vars in Carousel
//for (int i = 0; i < 10000; i++)
for (int i=0; i< NUMBER_OF_ITEMS; i++)
{
[items addObject:[NSNumber numberWithInt:i]];
}
}
现在通过更新uCarousel类中的_perspective参数,在iCarousel中提供透视图。在iCarousel.m的设置功能中执行此操作:
- (void)setUp
{
_type = iCarouselTypeLinear;
//NOTE! Tweak perspective parameters
_perspective = -1.0f/750.0f;
... etc ...
}
最后,通过围绕x轴旋转15度旋转,使整个视图围绕X轴“倾斜”。这样做的方法是调整变换矩阵(set transform = CATransform3DRotate(transform,-15.0f * M_PI / 180.0f,1.0f,0.0f,0.0f)在代码中,在iCarousel.m的transformForItemView函数中更新为如下:
- (CATransform3D)transformForItemView:(UIView *)view withOffset:(CGFloat)offset
{
//set up base transform
CATransform3D transform = CATransform3DIdentity;
transform.m34 = _perspective;
transform = CATransform3DTranslate(transform, -_viewpointOffset.width, _viewpointOffset.height, 0.0f);
//perform transform
switch (_type)
{
.... SKIPPED THE INITIAL SECTIONS OF THIS CODE WE MAKE OUR CHANGE IN THE CYLINDER SECTION ...
case iCarouselTypeCylinder:
case iCarouselTypeInvertedCylinder:
{
CGFloat count = [self circularCarouselItemCount];
CGFloat spacing = [self valueForOption:iCarouselOptionSpacing withDefault:1.0f];
CGFloat arc = [self valueForOption:iCarouselOptionArc withDefault:M_PI * 2.0f];
CGFloat radius = [self valueForOption:iCarouselOptionRadius withDefault:fmaxf(0.01f, _itemWidth * spacing / 2.0f / tanf(arc/2.0f/count))];
CGFloat angle = [self valueForOption:iCarouselOptionAngle withDefault:offset / count * arc];
if (_type == iCarouselTypeInvertedCylinder)
{
radius = -radius;
angle = -angle;
}
if (_vertical)
{
transform = CATransform3DTranslate(transform, 0.0f, 0.0f, -radius);
transform = CATransform3DRotate(transform, angle, -1.0f, 0.0f, 0.0f);
return CATransform3DTranslate(transform, 0.0f, 0.0f, radius + 0.01f);
}
else
{
transform = CATransform3DTranslate(transform, 0.0f, 0.0f, -radius);
//NOTE! Give it a tilt about the "X" axis
transform = CATransform3DRotate(transform, -15.0f*M_PI/180.0f, 1.0f, 0.0f, 0.0f);
transform = CATransform3DRotate(transform, angle, 0.0f, 1.0f, 0.0f);
return CATransform3DTranslate(transform, 0.0f, 0.0f, radius + 0.01f);
}