Анимация изображения через CGContextDrawPDFPage - PullRequest
0 голосов
/ 30 мая 2010

У меня есть страница в формате PDF, отображаемая с помощью CGContextDrawPDFPage в примере приложения QuartzDemo.

Я хочу, чтобы эта страница отображалась, а изображение скользило сверху сверху, как это можно увидеть в iBooksприложение.

Это книга, скользящее изображение - это закладка, которая вставляется, когда вы собираетесь закрыть книгу.

Я добавил этот код с помощью DyingCactus (подсказка: я новичок в obj c и iphone dev) следующим образом:

В QuartzViewController.m анимация начинает показываться, но вид исчезает до завершения анимации, на самом деле я думаю, что анимация продолжается, покавид ускользает.

-(void)viewWillDisappear:(BOOL)animated
{
    [self.quartzView setFrame:CGRectMake(150, -200, 100, 200)];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    [self.quartzView setFrame:CGRectMake(150, 0, 100, 200)];
    [UIView commitAnimations];  
}

Как сохранить видимость видимой и завершить анимацию до исчезновения вида?

1 Ответ

0 голосов
/ 30 мая 2010

Я предполагаю, что вы модифицируете пример приложения QuartzDemo от Apple.

Лучший способ, о котором я могу подумать сейчас, - это заменить кнопку «Назад» на контроллере навигации своей собственной кнопкой, когда отображаемое представление является представлением PDF.

Ваша пользовательская кнопка «Назад» может управлять анимацией и просматривать последовательность всплывающих надписей.

Единственное, что раздражает, это то, что кнопка «Назад» больше не имеет форму стрелки влево.

Вот изменения, необходимые в QuartzViewController.m:

#import "QuartzImages.h"  //<-- add this import
...
-(void)viewDidLoad
{
    // Add the QuartzView
    [scrollView addSubview:self.quartzView];

    //add custom back button if this is the PDF view...
    if ([self.quartzView isKindOfClass:[QuartzPDFView class]])
    {
        self.navigationItem.leftBarButtonItem =
        [[UIBarButtonItem alloc] initWithTitle:@"QuartzDemo"
                                 style:UIBarButtonItemStyleBordered
                                 target:self
                                 action:@selector(myBackButtonHandler:)];
    }
}

- (void)myBackButtonHandler:(id)sender
{
    [self.quartzView setFrame:CGRectMake(150, -200, 100, 200)];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
    [UIView setAnimationDuration:1.0];
    [self.quartzView setFrame:CGRectMake(150, 0, 100, 200)];
    [UIView commitAnimations]; 
}

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
    [self.navigationController popViewControllerAnimated:YES];
}
...