2015-01-05 2 views
0

У меня есть CustomView с кодом в DrawRect так:Пользовательский вид визуализации после scrollViewDidEndZooming

для вар я = 0; i < m; ++ я

{ 
     // just draw lines 
     UIColor.blackColor().setStroke() 
     let line = UIBezierPath() 
     line.moveToPoint(CGPoint(x: 0, y:0 + CGFloat(i) * cellWidth)) 
     line.addLineToPoint(CGPoint(x: size.width, y:0 + CGFloat(i) * cellWidth)) 
     line.closePath() 
     line.stroke() 
    } 

В scrollViewDidEndZooming я пытаюсь сделать что-то вроде customView.setNeedsDisplay() и перерисовывать вид, чтобы сделать последний хорошо выглядеть, но результат оказывается таким образом (строки имеют разную ширину):

odd lines

Как сделать это хорошо?

+0

'line.lineWidth = шкала * k' немного помогает, но я думаю, что должна быть лучше решение – user1261347

ответ

0

** drawRect ** - тяжелый метод, который вызывается постоянно. Обычно считается, что плохая практика заключается в добавлении в нее строк.

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

Внутри scrollViewDidEndZooming, проверьте смещение содержимого прокрутки и установите его в CGPointZero, если это не (0,0).

Надеется, что это помогает ..

+0

Судя по журналу в ** DrawRect ** в Debuger она вызывается достаточно редко, вы уверены, что эта функция непрерывно работает? – user1261347

+0

Он будет вызываться всякий раз, когда вы вызываете [customView.setNeedsDisplay] Таким образом, могут быть некоторые линии, которые будут снова нарисованы снова и снова в том же месте. –

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