【问题标题】:iCarousel - How to shift the focus to the left sideiCarousel - 如何将焦点转移到左侧
【发布时间】:2013-11-02 00:57:35
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

    标签: ios iphone objective-c cocoa-touch 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.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-12-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-04-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-26
            相关资源
            最近更新 更多