【问题标题】:Swift: how to show a zoomed area of an UIImageView into another UIImageViewSwift:如何将 UIImageView 的缩放区域显示到另一个 UIImageView
【发布时间】:2015-12-01 08:54:02
【问题描述】:

我知道到目前为止我已经写了很多关于这个的帖子,但这可以解决我关于精度的问题。我已经看到许多应用程序在可拖动对象附近显示 UIImageView 的缩放区域,如下面的屏幕截图(Jobnote):

我想知道哪种方法可以最快、最简单地获得类似的东西。我猜圆形视图是一个 UIImageView 但我不知道如何在其中放大。任何帮助都会是你的。谢谢

更新:

是否可以通过使用MagnifierContainerViewMagnifyingGlassView 描述的here 来获得这个?

【问题讨论】:

    标签: xcode swift uiimageview zooming uipangesturerecognizer


    【解决方案1】:

    我做了一些不太相似的事情,弹出一个高分辨率图像的 1:1 预览 you can read about here

    简而言之,我有一个peekPreviewSize,它是放大后的正方形预览的边长。然后我可以定义我的触摸位置的偏移量:

    let offset = ((peekPreviewSize * imageScale) / (imageWidth * imageScale)) / 2
    

    接下来,我计算组件边缘和它包含的图像边缘之间的距离:

    let leftBorder = (bounds.width - (imageWidth * imageScale)) / 2
    

    然后,使用触摸点的位置和这两个新值,我可以创建剪辑矩形的归一化 x 原点:

    let normalisedXPosition = ((location.x - leftBorder) / (imageWidth * imageScale)) - offset
    

    我对 y 做同样的事情,并使用这两个标准化值创建一个预览点:

    let topBorder = (bounds.height - (imageHeight * imageScale)) / 2
    let normalisedYPosition = ((location.y - topBorder) / (imageHeight * imageScale)) - offset
    let normalisedPreviewPoint = CGPoint(x: normalisedXPosition, y: normalisedYPosition)
    

    ...传递给我的 ForceZoomPreview:

    let peek = ForceZoomPreview(normalisedPreviewPoint: normalisedPreviewPoint, image: image!)
    

    我的预览组件现在要做的工作很少。它在其构造函数(上图)中传递了规范化的原点,所以它需要做的就是使用这些值来设置图像视图的contentsRect

    imageView.layer.contentsRect = CGRect(
        x: max(min(normalisedPreviewPoint.x, 1), 0),
        y: max(min(normalisedPreviewPoint.y, 1), 0),
        width: view.frame.width / image.size.width,
        height: view.frame.height / image.size.height)
    

    【讨论】:

    • 谢谢,这很有趣。我马上试一试,然后告诉你。
    • 我正在尝试在 xcode ios 模拟器上运行您的项目,但是当我点击屏幕上的一个点时没有任何反应。也许,我是不是用错了方法?
    • 该项目由 3D touch Peek and Pop 提供支持,因此无法在模拟器中运行。您需要对其进行调整,使其只需简单的触摸或长按识别器即可工作。抱歉,直到今天晚些时候我才能访问它(我在英国工作)。
    • 别担心,没关系。我猜它不会在 iphone 4s/5/5s 上运行,对吧?
    • 就目前而言,遗憾的是没有。但是一旦你移除 3D Touch 的东西,基本的机制就会起作用。
    猜你喜欢
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多