【发布时间】:2013-11-02 00:57:35
【问题描述】:
我需要以某种方式实现 iCarousel,使其看起来像这样:
我已经完成了所有修改以使其看起来像这样,但现在问题是 iCarousel 使用焦点中的中心图像。我可以让它如果只有两个图像,它们不会出现在中间,而是出现在左边吗?把它想象成“左缩进”的内容。
我该怎么做?
【问题讨论】:
标签: ios iphone objective-c cocoa-touch icarousel
我需要以某种方式实现 iCarousel,使其看起来像这样:
我已经完成了所有修改以使其看起来像这样,但现在问题是 iCarousel 使用焦点中的中心图像。我可以让它如果只有两个图像,它们不会出现在中间,而是出现在左边吗?把它想象成“左缩进”的内容。
我该怎么做?
【问题讨论】:
标签: ios iphone objective-c cocoa-touch 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);
}
唯一的问题是当你到达最右端时 carousel 会有一个差距,但你可以使用占位符视图 填补空白。
【讨论】:
我也遇到了同样的问题。经过简单的数学运算,我找到了更准确的答案。我已将此代码放入我的 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))
【讨论】: