2017-02-19 5 views
0

Я пытаюсь сделать экран с видом, в котором пользователь может что-то нарисовать. Я создал настраиваемое представление с таким кодом:странная ошибка с рисунком в UISplitViewController

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    swiped = false 
    if let touch = touches.first { 
     lastPoint = touch.location(in: imageView) 
    } 
} 

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
    swiped = true 
    if let touch = touches.first { 
     let currentPoint = touch.location(in: imageView) 
     drawLine(fromPoint: lastPoint, toPoint: currentPoint) 

     lastPoint = currentPoint 
    } 
} 

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

и функции рисования

func drawLine(fromPoint: CGPoint, toPoint: CGPoint) { 
    UIGraphicsBeginImageContext(imageView.frame.size) 
    let context = UIGraphicsGetCurrentContext() 
    imageView.image?.draw(in: CGRect(x: 0, y: 0, width: imageView.frame.size.width, height: imageView.frame.size.height)) 

    context?.move(to: fromPoint) 
    context?.addLine(to: toPoint) 

    context?.setLineCap(.round) 
    context?.setLineWidth(lineWidth) 
    context?.setStrokeColor(lineColor.cgColor) 

    context?.strokePath() 

    imageView.image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
} 

, когда я показываю, что вид на вид контроллера все нормально:

enter image description here

, но когда я показываю он подробно отображается в UISplitViewController, в то время как пользователь продолжает рисовать, часть уже нарисованного изображения перемещается и исчезает: enter image description here

Я не могу найти ничего о том, что ошибка в сети и не имеют ни малейшего представления о том, что такое поведение производится

ли кто-нибудь есть какие-либо идеи по этому поводу?

Вот пример проекта, где вы можете воспроизвести эту ошибку: https://github.com/fizzy871/DrawingBug

Кстати, в реальном проекте не только мастер вид расщепленного контроллера представления, но панель навигации влияет на рисунок слишком

ответ

1

Оказалось, что он ведет себя таким образом из-за рамки imageView с дробной частью по размеру.

enter image description here

Я только умноженный контекст рисования на 2 и проблема решена:

func drawLine(fromPoint fromPoint: CGPoint, toPoint: CGPoint) { 
    // multiply to avoid problems when imageView frame value is XX.5 
    let fixedFrameForDrawing = CGRect(x: 0, y: 0, width: imageView.frame.size.width*2, height: imageView.frame.size.height*2) 
    let point1 = CGPoint(x: fromPoint.x*2, y: fromPoint.y*2) 
    let point2 = CGPoint(x: toPoint.x*2, y: toPoint.y*2) 
    UIGraphicsBeginImageContext(fixedFrameForDrawing.size) 
    if let context = UIGraphicsGetCurrentContext() { 
     imageView.image?.draw(in: fixedFrameForDrawing) 

     context.move(to: point1) 
     context.addLine(to: point2) 

     context.setLineCap(.round) 
     context.setLineWidth(lineWidth*2) 
     context.setStrokeColor(lineColor.cgColor) 

     context.strokePath() 

     let imageFromContext = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     imageView.image = imageFromContext 
    } 
+0

Это просто случилось в мое приложение, сумасшедшие вещи. Теперь я округлил размер рамки, и он отлично работает. Это, должно быть, трудно было понять, спасибо за решение! –

Смежные вопросы