创建一个可滚动的菜单,其中 UIImages 代表每个可能的选择。这些 UIImages 必须能够一张一张地捕捉到网格

Posted

技术标签:

【中文标题】创建一个可滚动的菜单,其中 UIImages 代表每个可能的选择。这些 UIImages 必须能够一张一张地捕捉到网格【英文标题】:Create a scrollable menu with UIImages representing each possible selection. These UIImages must be able to snap to the grid one by one 【发布时间】:2011-09-02 06:09:40 【问题描述】:

我正在尝试创建一个菜单(使用 UIScrollView),用户可以在其中选择图像(使用 UIImageViews)。

我打算随时显示至少 3 张图片。当我滚动时,图像将能够对齐到位。

但是,如果我要使用大到足以在任何时候显示 3 张图像的 UIScrollView,并且我启用了分页,则分页会将所有 3 张图像一起移动并仅在接下来的 3 张图像上捕捉。

如果我要使用仅适合 1 个图像的 UIScrollView,我启用 clipsToBounds(这有助于我将图像绘制到 UIScrollView 的边界之外)。我的图形手势只能在 UIScrollView 本身内检测到,我希望只要触摸任何图像就可以检测到我的图形手势。

谢谢。

【问题讨论】:

【参考方案1】:

您可以使用 UIScrollView 的以下方法从代码中尽可能多地滚动它。

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated

你可以从下面的 UIScrowViewDelegate 方法中调用它。 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

因此,您可以管理滚动视图的调用量。

为了获得触摸,实现一个单独的类来显示图像(从 UIImageView 或 UIView 继承)并在其中实现 touchesBegin 或 touchesEnded。在这里,当您在自定义视图中获得触摸时,调用父视图的某些方法并使用适当的参数通知它(您可以分配标签属性并将其传递给滚动视图以准确查找被点击的图像)。

.....我不确定天气是否正在解决您的问题.....如果您需要任何进一步的帮助,请在此处发布。

【讨论】:

嗨学习者。谢谢你的回复。我最终找到了解决方案。我相信很多人都面临同样的问题,但我没有正确地解决问题。无论如何感谢您的帮助!【参考方案2】:

我编写了一个自定义 UIView 类,它覆盖了 UIView 的 hitTest 方法。

在自定义 UIView 类的头部,声明一个 UIScrollView,稍后你需要将显示菜单的 UIScrollView 分配给这个变量。

UIScrollView *thatScrollView;

在实现中,记得合成变量并覆盖hitTest

@synthesize thatScrollView;

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event

    if ([self pointInside:point withEvent:event]) 
        return thatScrollView;
    
    return nil;

然后在 UIViewController 类中,创建该类的一个实例,并分配你要滚动的滚动视图:

hiddenView.underneathButton = scrollView1;

【讨论】:

以上是关于创建一个可滚动的菜单,其中 UIImages 代表每个可能的选择。这些 UIImages 必须能够一张一张地捕捉到网格的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 中带有 UIImages 的 UIButton - 重叠等

UIScrollview 仅在拖动 uiviews 时滚动

Kivy - 创建一个可扩展的 ScrollView

带有按钮的可滚动菜单部分

创建水平滚动菜单栏

将 UIImages 高度缩放到 UIImageView 高度