Нарисуйте линию в UIView на основе анимированного CGPoint.x - PullRequest
0 голосов
/ 02 декабря 2011

Я пытаюсь нарисовать вертикальную линию в UIView (назовите это View A) на основе центра подпредставления «View A».

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

Например, если подпредставление находится в CGPoint (0,100) и я хочу анимировать в CGPoint (100,100).Подвид перемещается, как и ожидалось, однако рисование линий не появляется только в CGPoint (100 100) на протяжении всей анимации.

Конечно, внутри блока анимации, который я вызываю [self setNeedsDisplay]

Код, который я использую, выглядит следующим образом (pointView - это упомянутое выше подпредставление):

CGPointView newCetner = CGPointMake(100,100);
[UIView animateWithDuration:.5 animations:^{                
 pointView.center = newCenter;
 [self setNeedsDisplay];
}];   

в методе drawRect у меня есть следующий код:

CGPathMoveToPoint(path, NULL, CGRectGetMidX(pointView.frame), pointView.center.y-100 );    
CGPathAddLineToPoint(path, NULL, CGRectGetMidX(pointView.frame), pointView.center.y+100 );    
CGContextAddPath(context, path);
CGContextStrokePath(context);    

Любые идеи, как яможет заставить представление перерисовываться в соответствии с блоком анимации?

1 Ответ

0 голосов
/ 02 декабря 2011

По умолчанию анимация работает, сохраняя начальную и конечную версии представления и применяя некоторые недорогие преобразования для перехода от одного к другому.Промежуточные версии представления не отображаются с drawRect:.

. Вы можете запросить, чтобы для промежуточных шагов был вызван drawRect:, передав опцию UIViewAnimationOptionAllowAnimatedContent в animateWithDuration:delay:options:animations:completion:.Убедитесь, что drawRect: быстр при использовании этой опции, так как она будет вызываться часто.

...