【问题标题】:ContentMode changes in uiimageview after draw绘制后uiimageview中的ContentMode更改
【发布时间】:2017-04-13 17:06:08
【问题描述】:

我一直在关注 Ray Wenderlics 关于如何创建基本绘图应用程序的教程。

除了我在 uiimageview 上绘制内容模式更改时,它工作得很好。

我已在情节提要中将其设置为 aspectFill 并应用了图像

我认为问题出在我的触摸结束方法上

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    if !swiped {
        // draw a single point
        drawLineFrom(fromPoint: lastPoint, toPoint: lastPoint)
    }

    // Merge tempImageView into mainImageView
    UIGraphicsBeginImageContext(mainImageView.frame.size)
    mainImageView.image?.draw(in: CGRect(x: 0, y: 0, width: mainImageView.frame.size.width, height: mainImageView.frame.size.height), blendMode: CGBlendMode.normal, alpha: 1.0)
    tempImageView.image?.draw(in: CGRect(x: 0, y: 0, width: mainImageView.frame.size.width, height: mainImageView.frame.size.height), blendMode: CGBlendMode.normal, alpha: opacity)
    mainImageView.image = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    tempImageView.image = nil


}

它将内容模式更改为似乎是 scaleToFill 或 Scale to fit?

有人知道我是怎么改的吗?

问候

托马斯

更新

感谢马特的指导

我添加了以下代码

  let imageSize = AVMakeRect(aspectRatio: (mainImageView.image?.size)!, insideRect: mainImageView.frame)

    mainImageView.image?.draw(in: CGRect(x: 0, y: 0, width: imageSize.width , height: imageSize.height), blendMode: CGBlendMode.normal, alpha: 1.0)
    tempImageView.image?.draw(in: CGRect(x: 0, y: 0, width: imageSize.width, height: imageSize.height), blendMode: CGBlendMode.normal, alpha: opacity)
    mainImageView.image = UIGraphicsGetImageFromCurrentImageContext()

我认为我在正确的轨道上,但图像现在正在调整大小以适应方面而不是方面填充。

【问题讨论】:

  • 有什么更新吗?你能解决这个问题吗?

标签: swift uiimageview core-graphics


【解决方案1】:

图像视图的内容模式没有改变。 (您可以轻松地测试它,只需检查它的contentMode,这不会在您的代码中的任何地方发生。)

问题在于你的绘画方式!您正在将图像mainImageView.image 绘制到矩形CGRect(x: 0, y: 0, width: mainImageView.frame.size.width, height: mainImageView.frame.size.height) 中。这会拉伸图像以完全适合该矩形 - 导致您抱怨的拉伸行为。

换句话说,在说“缩放这个图像以填充这个矩形”,这正是发生的事情。

【讨论】:

  • 您能否详细说明防止这种拉伸所需的更改?
  • @DoesData 不清楚你的意思。这里没有“问题”;代码完全按照 OP 的要求执行。如果您有新问题,请不要在 cmets 中戳它;问一个关于你的问题的真实问题。
  • 我知道代码正在做他告诉它做的事情。我在问你如何正确地在图像上绘制,这样就不会发生这种拉伸。
  • 我请在你自己的问题,所以我们可以解决这个问题。
猜你喜欢
  • 2022-08-07
  • 2018-04-07
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多