在我在图像上绘制内容后,我的ImageView的内容模式停止​​工作

时间:2016-11-12 23:27:09

标签: ios swift uiimage uigraphicscontext contentmode

感谢您的时间。

在点击图像之前图像很好,然后在点击图像后压缩图像。

这是我的代码:

我没有使用故事板,所以我使用代码创建所有内容,这里是ImageView。我还在代码中添加了约束。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation

n = 21
x = np.linspace(-1.0, 1.0, num=n)
q = plt.quiver(x[:1], [0], [1], [0])
def animate(i):
    q.set_offsets([[x[i], 0]])
    return q,

plt.gca().set_xlim([-1, 1])
anim = matplotlib.animation.FuncAnimation(plt.gcf(), animate, frames=n,
                                          repeat=True, blit=True)

plt.show()
#anim.save('anim.gif', dpi=80, writer='imagemagick')
#anim.save('anim.mp4', dpi=80, writer='ffmpeg')

1 个答案:

答案 0 :(得分:0)

我不知道“压缩”是什么意思,但我猜测图像会以某种方式被破坏,因为当您将图像转换为CGContext并返回图像时,某些数据会丢失。

我不知道如何解决这个问题,但我只是通过在CAShapeLayer中添加UIImageView作为子图层来解决这个问题,然后以一种形式绘制你想要的内容。 CGPath。语法与您现在使用的语法非常相似,并且可能不支持的唯一效果是混合模式,但您可以使用具有较低alpha值的另一个层重新创建此语法。

这就是它的样子。

var drawingLayer = CAShapeLayer()
func drawLines(fromPoint: CGPoint, toPoint: CGPoint) {
    let mutable = CGMutablePath()
    mutable.move(to: fromPoint)
    mutable.addline(to: toPoint)
    drawingLayer.path = mutable
    drawingLayer.fillColor = nil
    drawingLayer.lineCap = kCALineCapRound
    drawingLayer.lineCap = 120 * CGFloat(lineWidthSliderView.value)
    //the bit in your code translated the whole thing to Int before translating it to a 
    //CGFloat, this is a bad idea since Ints cannot store decimals, so if there is no 
    //direct conversion, convert it to Double or Float
    drawingLayer.strokeColor = UIColor(calibratedRed: red/255, green: green/255, blue: blue/255 , alpha: 1).cgColor

}

某处您还需要imageEditingView.addSubLayer(drawingLayer)

另外,当您执行context.move(to:)和其他地方时,您不需要将CGPoint转换为另一个CGPoint ......