我需要以某种方式实现 iCarousel,使其看起来像这样:
我已经完成了所有修改以使其看起来像这样,但现在的问题是 iCarousel 与焦点中的中心图像一起工作。我可以做到,如果只有两个图像,它们不会出现在中间,而是出现在左边吗?把它想象成“左缩进”的内容。
我该怎么做呢?
我需要以某种方式实现 iCarousel,使其看起来像这样:
我已经完成了所有修改以使其看起来像这样,但现在的问题是 iCarousel 与焦点中的中心图像一起工作。我可以做到,如果只有两个图像,它们不会出现在中间,而是出现在左边吗?把它想象成“左缩进”的内容。
我该怎么做呢?
iCarousal 提供了一个属性来通过设置宽度偏移来向左或向右筛选焦点。
对于右侧,将此代码用于 swift 2.3 -
let widthOffset: Float = -120.0
self.customCarousel.viewpointOffset = CGSize(width: CGFloat(widthOffset), height: CGFloat(0))
这应该是您正在寻找的 iCarousel 中的属性viewpointOffset
例子...
// Modifiy widthOffset so it works well in your case
float widthOffset = 100.0;
[_yourCarousel setViewpointOffset:CGSizeMake(widthOffset, 0)];
该viewpointOffset
属性实际上不是那样工作的。它会让你对齐到一个边缘,但是当你滚动到最后时,你会遇到同样的问题。
iCarousel 并不是为此而设计的。我建议您改用 SwipeView ( http://github.com/nicklockwood/SwipeView ),它具有相同的委托/数据源接口,但具有alignment
可用于设置边缘对齐的属性,如下所示:
swipeView.alignment = SwipeViewAlignmentEdge;
访问https://github.com/nicklockwood/iCarousel/issues/142 它可能会有所帮助。nicklockwood (作者) 答案:
您可以使用委托并创建一个自定义转换,将您的所有视图偏移一个负数。像这样的东西:
- (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform
{
float OFFSET_WIDTH = ...; // set this to about half the width of your view
return CATransform3DMakeTranslation(offset * itemWidth - OFFSET_WIDTH, 0, 0);
}
唯一的问题是,当您到达轮播的最右端时,会有一个空隙,但您可以使用占位符视图来填补空隙。
我绊倒了同样的问题。经过简单的数学运算,我找到了更准确的答案。我已将此代码放入我的viewDidAppear()
函数中,因为当我将它放入viewDidLoad()
并采用故事板的原始宽度时view.frame.width
,view.frame.height
它不适合更大的设备。
我的用例如下。我的 iCarousel 项目是简单的正方形。这意味着,例如,我的高度为 3,宽度为 3。但我的 iCarousel 视图的宽度为 5。总而言之,我有 5-3=2 个空间,1 个左和 1 个右(因为我们知道它的默认值是居中)。所以最后一步是除以 2 以获得一个站点的宽度 = 1。有了这些知识,我们只需将 设置viewPointOffset
为 1(在这种情况下)。
最终公式:let widthOffset = (view.frame.width - view.frame.height) / 2
我的代码中的示例:
let widthOffset: Float = Float((mDetailCarousel.frame.width - mDetailCarousel.frame.height) / 2 )
mDetailCarousel.viewpointOffset = CGSize(width: CGFloat(widthOffset), height: CGFloat(0))