重新绘制手指画图以显示风景

时间:2019-04-22 03:56:41

标签: ios swift drawing

我有一个应用程序,它从称为Slate的硬件设备接收输入。平板电脑必不可少,我可以将自己编写的任何平板电脑发送到我的iOS应用。我从设备收到x,y坐标。我使用UIBezierPath和自定义UIView绘制它们。在纵向模式下,我可以画得很好。但是,在“风景”模式下,我希望将肖像画重新调整为风景。

我尝试编写一个简单的解决方案,最后以时髦的方式拉伸了我的图像。我创建了一个点数组,该点数组随绘制板岩而填充,接下来,当屏幕改变方向时,我使用编写的函数重新计算这些点,以尝试保持相同的图形但保持横向。

func move_moved(point: CGPoint)
{
    var newPoint = convert_point(point: point)
      path.addLine(to: newPoint)
setNeedsDisplay
}

  func move_began(point: CGPoint)
    {

         var newPoint = convert_point(point: point)
        path.move(to: newPoint)
setNeedsDisplay()
}
func adjust(TransitionTo tosize: CGSize, NewPoints newpoints: [(point: CGPoint, type: CGPathElementType)])

{
    path = UIBezierPath()
    setNeedsDisplay()
    adjusted = true
    for i in 0 ..< newpoints.count {
        switch (newpoints[i].type.rawValue)
        {
        case 0:
            move_began(point: newpoints[i].point)
            setNeedsDisplay()
            break
        case 1:
            move_moved(point: newpoints[i].point)
            setNeedsDisplay()
            break
        case 2:
            break
        default:
            break
        }
    }
    adjusted = false
}

}


func convert_point(point: CGPoint) -> CGPoint
{

    var toConvert = CGPoint()

    toConvert.x = (point.x - MyManager.shared().activeZone.origin.x ) / MyManager.shared().activeZone.size.width * self.bounds.size.width
        toConvert.y = (point.y - MyManager.shared().activeZone.origin.y) / MyManager.shared().activeZone.size.height * self.bounds.size.height
    toConvert = toConvert.rotate(around: self.bounds.center, with: degreesOfRotation)


    return toConvert
}

我希望Adjust函数能够正确重绘我的图像...结果如下:

first issue

现在旋转到横向,并使用新的宽度和高度通过convert_point函数重画所有这些点。

first issue

我必须采取一些措施来解决这个问题。

此外,我还需要“重绘”为UIBezierPath形式,以处理绘图应用程序的其他事项,例如保存它们或在其上进行进一步绘制。

0 个答案:

没有答案