我已在我的项目中实施了iCarousels。但在更新iOS 7的应用程序后,我的iCarousels陷入了困境。它在iOS 6和5中运行良好。在iOS 7中的问题是,当我触摸旋转木马视图时,我的第一个视图中的滚动视图有时被调用。任何人都可以帮助我吗?
解决方案是否采用以下方法的返回值:
- (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;
}
答案 0 :(得分:3)
问题似乎是当一个scrollview接到一个触摸时,它等待一秒钟,看它是否应该在将它传递给轮播之前处理它。
您可以(主要)通过设置scrollView.delaysContentTouches = NO;
来解决此问题如果您在滚动视图移动/减速时尝试滑动旋转木马,它仍然有点笨拙。您将不得不等到它停止移动以与旋转木马交互。
我正在调查是否有更好的解决方法。
更新:
我仍然没有适当的通用修复程序,但作为一种解决方法,您可以将此方法添加到iCarousel的本地副本中:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return [gesture isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
}
这迫使iCarousel的平移手势识别器优先于scrollView中的手势识别器。如果你将它与上面的delaysContentTouches修复结合起来,那么当它在tableview或scrollview中滚动时,你不应该有任何问题。