我有一个应用程序,它从称为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函数能够正确重绘我的图像...结果如下:
现在旋转到横向,并使用新的宽度和高度通过convert_point函数重画所有这些点。
我必须采取一些措施来解决这个问题。
此外,我还需要“重绘”为UIBezierPath形式,以处理绘图应用程序的其他事项,例如保存它们或在其上进行进一步绘制。