我已经在我的项目中实现了 iCarousels。但是在为 iOS 7 更新应用程序后,我的 iCarousels 卡在了两者之间。它在 iOS 6 和 5 中运行良好。iOS 7 中的问题是,当我触摸轮播视图时,有时会首先调用 iCarousel 视图下方的滚动视图。有谁可以帮我离开这里吗?
是下面方法的返回值中的解决方案:
- (CGFloat)carouselItemWidth:(iCarousel *)carousel
我在这里尝试了很多东西,它运行良好几次,但一段时间后它又开始卡住,因为滚动视图从其子视图(iCarousel 视图)获取触摸并在 iCarousel 的委托方法之前调用它自己的委托方法。
我没有使用任何手势识别器。我正在使用滚动视图,因为我有 iCarousel 视图和另一个视图UIScrollView
,因此我也可以使用 pull 来刷新。
我正在使用以下委托方法,并且更改 carouselItemWidth 减少了卡住问题,但它仍然存在
- (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform
{
CGFloat tilt = 0.65f;
CGFloat spacing = 0.28f; // should be ~ 1/scrollSpeed;
CGFloat clampedOffset = fmaxf(-1.0f, fminf(1.5f, offset));
CGFloat itemWidth = 320;
CGFloat x = (clampedOffset * 0.5f * tilt + offset * spacing) * itemWidth;
CGFloat z = fabsf(clampedOffset) * -itemWidth * 0.5f;
transform = CATransform3DTranslate(transform, 0.0f, x, z);
transform = CATransform3DRotate(transform, -clampedOffset * M_PI_2 * tilt, -1.0f, 0.0f, 0.0f);
//DLog(@"offset: %f, %@", offset, [NSValue valueWithCATransform3D:transform]);
return transform;
}
- (NSUInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel
{
//note: placeholder views are only displayed on some carousels if wrapping is disabled
return 0;
}
- (CGFloat)carouselItemWidth:(iCarousel *)carousel
{
//usually this should be slightly wider than the item views
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
return 270;
}
else
{
return 250;
}
}
- (BOOL)carouselShouldWrap:(iCarousel *)carousel
{
return NO;
}