裁剪UI图像

时间:2017-01-31 18:36:11

标签: ios image swift3

我有一个填充我的屏幕的SceneKit视图。我的目标是让用户拍摄该场景的快照,但快照不是整个屏幕,而是UIImageView中的插图部分,它比屏幕略小。理想情况下,用户不应注意,顶部的图像应与其后面的场景相同。

我已经使用snapshotcropped对其进行了编码,但正如您在图片中看到的那样,比例结束了 - 看黄线的宽度和大小的宽度视窗?它也没有正确定位,它有点向下和从它应该的位置向左 - 左上方应该在窗户线下方,但你可以看到它位于它们上方的车顶线上。我无法看到原始快照,因为调试器QuickLook拒绝显示它。

enter image description here

没有太多代码,任何人都会看到问题:

    let background = sceneView.snapshot().cgImage!
    let cropped = background.cropping(to: overlayView.frame)
    UIGraphicsBeginImageContextWithOptions(overlayView.frame.size, false, 1.0)
    let context = UIGraphicsGetCurrentContext()
    context!.setAlpha(0.50)
    context!.draw(cropped!, in: overlayView.bounds)
    let transparent = context!.makeImage();
    UIGraphicsEndImageContext()
    overlayView.image = UIImage.init(cgImage: transparent!, scale: 1.0, orientation: .downMirrored)

我尝试过各种各样的尺度并且没有用。我认为这很容易。

更新:经过多次尝试后,我可以快速找到工作。正如我所料,快照确实是整个背景。但它比我想象的要大得多 - 它的640,998而裁剪版本是228,304。这解释了"缩放"。这让我相信插入视图的帧大小与图像大小没有直接关系。这会敲响任何铃声吗?我应该使用其他一些矩形而不是overlayView.frame吗?

1 个答案:

答案 0 :(得分:0)

所以我假设问题是框架坐标在一组单元中,而图像坐标在另一组中。我能够以这种方式解决问题:

import {Table, Column, Cell} from 'fixed-data-table';

我非常好奇为什么我必须调整Y起点让他们排队,任何人都有想法?