【问题标题】:How to create a window through one layer into another layer如何创建一个窗口通过一层进入另一层
【发布时间】:2013-02-11 21:37:55
【问题描述】:

我正在寻找一些方向来帮助在我的应用中实现特定功能。

这有点难以解释,但就是这样。虽然我使用多层隐喻(a la Photoshop)来可视化我的目标,但这只是为了解释我的愿景 - 我意识到这在实践中可能不合理。

我设想了 3 个“层”

  1. 包含图像的底层
  2. 顶部的另一层 - 比如说 50% 的灰色 - 但降低了不透明度,因此原始层仍然可见,但被淡化了。
  3. 然后是顶层的两个方形对象,每个都充当通过灰色层的“窗口”,一直到原始层等等 - 通过这些窗口,您可以看到原始图像的一部分 完全不透明。

最后,需要能够用手指在屏幕上拖动每个窗口,以独立重新定位每个窗口。

如果可以理想地使用某种手指手势调整每个窗口的大小(不是形状 - 仍然是正方形),那将是额外的功劳。

我不是在寻找代码(尽管我不会反对)。我正在寻找一种在 Objective-C 中执行此操作的方法,理想情况下不需要我深入研究诸如某些图形框架之类的高级主题。

谢谢! 托尼。

【问题讨论】:

    标签: ios xcode image window layer


    【解决方案1】:

    我会重新安排它。相反,有一个背景图像的平面图像,底部印有 50% 的灰色。然后,您拥有的两个正方形实际上是 UIImageViews,其背景图像设置为固定位置,图像视图将该图像剪辑到其边界。当您移动两个图像视图时,您只需平移图像的原点。

    抱歉,这有点难以解释我的想法。我应该试着画出来。

    【讨论】:

    • 嗨 Bergasms - 感谢您的建议。我对其他建议不太满意,如果您能进一步详细说明您的建议,将不胜感激?
    • 当然,我整理了一些东西,希望能帮助你。
    • 嗨,Bergasms。很抱歉有问题。运气好吗?
    • 对不起,完全隔开。所以,我将如何安排它如下。您的底层由图像组成,以某种方式应用了 50% 的不透明度。它位于底部,您无需对其执行任何其他操作。现在,您可以移动的两个视图都有一个 uiimageview 作为子视图,并且这个 uiimageview 包含您的基本图像,可移动视图将它们的子视图剪辑到边界。可移动视图框架与基本视图相同,但是可移动视图的边界代表您的“窗口”。应该使用使用触摸的移动来移动边界。
    • 所以这给你的效果是基本图像只显示在边界所在的“窗口”中,其余的“窗口”视图将是透明的。请注意,这只是一种方式。另一种方法是将不透明度绘制为 CALayer。 “Windows”是可以通过触摸移动的透明视图,并且 calayer 使用这些视图在它绘制的 opcaity 上绘制透明矩形。这是另一种方式。
    【解决方案2】:

    这是我将尝试的粗略概述。

    我会使用 2 个视图(不是图层)。最底部的视图将是图像视图。

    顶视图将是自定义视图。此自定义视图将有两个其他视图作为子视图。这两个子视图将代表两个“洞”。使用自己的手势识别器设置两个子视图以处理平移和缩放。给两个子视图(和容器视图)一个清晰的背景,可能还有一个边框。此自定义视图的主视图需要实现其drawRect: 方法。该实现将绘制部分透明的灰色背景。它会在绘制灰色之前使用两个子视图的位置和大小来设置剪切区域。

    每次调整或移动 2 个子视图时,您都需要在容器视图上调用 setNeedsDisplay,以便调用 drawRect: 方法以刷新带有孔的灰色背景。

    【讨论】:

    • @rmaddy-谢谢。在情节提要中,我有一个 UIImageView 包含 2 个子视图。一次开始,我将 Subview1 设为 UIGestureRecognizerDelegate 并添加了一个带有关联选择器的平移手势识别器。但是,我想我习惯于在 UIViewController 级别工作,其中 viewDidLoad 等实例方法允许我添加我的手势设置代码。在子视图中,默认情况下我只有 initWithFrame,但这不会触发。我发现了 initWithCoder - is 被触发,但是将我的手势代码放在那里会导致未捕获的异常。任何指导表示赞赏。
    • 好的,我有两个子视图响应手势。我现在不知道如何在容器视图的 drawRect: 方法中创建剪辑区域。任何指导表示赞赏。仅供参考,我的视图层次结构包括: UIViewController 包含 UIView 包含背景图像 UIImageView 加上容器 UIView 包含 SubView1 和 Subview 2 UIImageViews。
    • 在玩了很多之后终于让它工作了。最终使用了你方法 maddy 的元素。还要感谢@Bergasms 的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多