3

我需要以某种方式实现 iCarousel,使其看起来像这样: 示例图像

我已经完成了所有修改以使其看起来像这样,但现在的问题是 iCarousel 与焦点中的中心图像一起工作。我可以做到,如果只有两个图像,它们不会出现在中间,而是出现在左边吗?把它想象成“左缩进”的内容。

我该怎么做呢?

4

5 回答 5

7

iCarousal 提供了一个属性来通过设置宽度偏移来向左或向右筛选焦点。

对于右侧,将此代码用于 swift 2.3 -

let widthOffset: Float = -120.0
self.customCarousel.viewpointOffset = CGSize(width: CGFloat(widthOffset), height: CGFloat(0))
于 2017-02-16T11:54:11.333 回答
5

这应该是您正在寻找的 iCarousel 中的属性viewpointOffset

例子...

// Modifiy widthOffset so it works well in your case
float widthOffset = 100.0;
[_yourCarousel setViewpointOffset:CGSizeMake(widthOffset, 0)];
于 2013-11-02T04:07:05.997 回答
2

viewpointOffset属性实际上不是那样工作的。它会让你对齐到一个边缘,但是当你滚动到最后时,你会遇到同样的问题。

iCarousel 并不是为此而设计的。我建议您改用 SwipeView ( http://github.com/nicklockwood/SwipeView ),它具有相同的委托/数据源接口,但具有alignment可用于设置边缘对齐的属性,如下所示:

swipeView.alignment = SwipeViewAlignmentEdge;
于 2013-11-02T08:15:09.163 回答
0

访问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);
}

唯一的问题是,当您到达轮播的最右端时,会有一个空隙,但您可以使用占位符视图来填补空隙。

于 2018-05-24T11:33:30.397 回答
0

我绊倒了同样的问题。经过简单的数学运算,我找到了更准确的答案。我已将此代码放入我的viewDidAppear()函数中,因为当我将它放入viewDidLoad()并采用故事板的原始宽度时view.frame.widthview.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))
于 2019-09-02T22:04:38.193 回答