Как вы можете проверить, когда на экране появился законченный рисунок? - PullRequest
3 голосов
/ 21 марта 2012

Кажется, у меня есть некоторые проблемы с методом drawrect. Я рисую страницу PDF в виде, используя CGContextDrawPDFPage, а затем я хочу запустить анимацию UIView для фрейма представления после его загрузки. Однако, если я вызываю анимацию в конце метода drawrect, она вызывает прерывистую анимацию, потому что анимация проходит в середине своей продолжительности до того, как UIView действительно появится на экране (иногда через 2 секунды.

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

Вот мой код ...

-(void)drawRect:(CGRect)inRect{  

pageRef = [[PDFManager sharedManager] getLargePDFPageRefForPage:pageNumber];
if(pageRef) {
    ctx = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(ctx, 0.0, [self bounds].size.height);
    CGContextScaleCTM(ctx, 1.0, -1.0);
    CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(pageRef, kCGPDFCropBox, [self bounds], 0, true));
    CGContextSetInterpolationQuality(ctx, kCGInterpolationNone);
    CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);

    CGContextDrawPDFPage(ctx, pageRef);    
}

[self moveFrame];

}


-(void)moveFrame{


    [UIView animateWithDuration:0.7 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{

        self.frame = CGRectMake(0, 0, 500, 400);


    } completion:^(BOOL finished) {

    }];
}

1 Ответ

0 голосов
/ 21 марта 2012

AFAIK - drawRect: метод вызывается каждый раз, когда представление «портится», что может быть очень часто. Мой совет для вас заключается в том, чтобы писать «движущийся» код не в классе представления, а в классе контроллера, который, вероятно, является лучшим местом для разделения задач (контроллер управляет позицией представления, а представление управляет рисованием самого себя). Поток будет похож на это:

  1. Инициировать представление и добавить его в качестве подпредставления (в контроллере). Это заставит вид нарисовать себя.
  2. Переместите фактический вид в нужное место (в контроллере).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...