iCarousel - 如何将焦点转移到左侧
Posted
技术标签:
【中文标题】iCarousel - 如何将焦点转移到左侧【英文标题】:iCarousel - How to shift the focus to the left side 【发布时间】:2013-11-02 00:57:35 【问题描述】:我需要以某种方式实现 iCarousel,使其看起来像这样:
我已经完成了所有修改以使其看起来像这样,但现在问题是 iCarousel 使用焦点中的中心图像。我可以让它如果只有两个图像,它们不会出现在中间,而是出现在左边吗?把它想象成“左缩进”的内容。
我该怎么做?
【问题讨论】:
【参考方案1】:iCarousal 提供了一个属性,通过设置宽度偏移量来向左或向右筛选焦点。
右侧使用此代码用于 swift 2.3 -
let widthOffset: Float = -120.0
self.customCarousel.viewpointOffset = CGSize(width: CGFloat(widthOffset), height: CGFloat(0))
【讨论】:
【参考方案2】:这应该是您在 iCarousel 中寻找的属性viewpointOffset
示例...
// Modifiy widthOffset so it works well in your case
float widthOffset = 100.0;
[_yourCarousel setViewpointOffset:CGSizeMake(widthOffset, 0)];
【讨论】:
【参考方案3】:viewpointOffset
属性实际上并不是这样工作的。它会让你对齐到一个边缘,但是当你滚动到最后时,你会遇到同样的问题。
iCarousel 并不是为此而设计的。我建议您改用 SwipeView (http://github.com/nicklockwood/SwipeView),它具有相同的委托/数据源接口,但具有可用于设置边缘对齐的 alignment
属性,如下所示:
swipeView.alignment = SwipeViewAlignmentEdge;
【讨论】:
我还需要从列表中插入和删除项目的功能。 Swipeview没有给我那种效果。你能想到另一个可以帮助我实现这一目标的库吗?或者更好的是,能够自定义 iCarousel 库来做到这一点? 嗨尼克,刚刚注意到这是你自己的图书馆! duh 首先,我要感谢您为图书馆所做的如此出色的工作。我们能很快期待“缩进”功能吗?我会尝试 UICollectionView 的建议。 缩进通常不适用于任何类型的轮播。它只对线性类型才真正有意义。这就是为什么我在 SwipeView 而不是 iCarousel 上拥有它的原因。不过我会考虑的。 TBH 我怀疑我会在将边缘对齐添加到 iCarousel 之前将插入/删除添加到 SwipeView :-) 是的,有道理。 UICollectionView 为我做了。它拥有我想要的这个组件的一切。谢谢尼克。【参考方案4】:访问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 会有一个差距,但你可以使用占位符视图 填补空白。
【讨论】:
【参考方案5】:我也遇到了同样的问题。经过简单的数学运算,我找到了更准确的答案。我已将此代码放入我的 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))
【讨论】:
以上是关于iCarousel - 如何将焦点转移到左侧的主要内容,如果未能解决你的问题,请参考以下文章
关于 iOS 辅助功能。如何将焦点转移到pickerView