Какими способами вы можете использовать Core Animation для создания анимации скручивания или отслаивания? - PullRequest
0 голосов
/ 07 июля 2010

Я пытаюсь выяснить, как можно создать эффект скручивания или отслаивания на изображении в приложении для iPad с помощью Core Animation, но, изучая API, я понимаю только разные способы перемещать, масштабировать и вращать 2D-изображение (включая 3D-преобразования). Я хотел бы добиться этого эффекта на небольших отдельных слоях (то есть спрайтах), у которых есть изображения с обеих сторон, поэтому, когда вы отгибаете слой, вы выставляете изображение на задней стороне. Мне также нужно контролировать положение и угол, под которым слой отслаивается. Я ужасно разбираюсь в математике и надеялся, что кто-нибудь умнее меня сможет мне помочь, если я хотя бы пойму те базовые преобразования, которые я упомянул.

Заранее большое спасибо за мудрость!

Ответы [ 2 ]

1 голос
/ 07 июля 2010

Единственный способ легко создать его - использовать методы класса UIView следующим образом:

Этот код находится в файле MyViewController.h:

 @interface MyViewController : UIViewController
    {
       UIImageView* imageView1;
       UIImageView* imageView2;
    }
  @end

Этот кодидет в файле MyViewController.m:

 @implementation MyViewController

    - (void) dealloc
    {
       [imageView2 release];
       [imageView1 release];

       [super dealloc];
    }

    - (void) loadView
    {
       self.view = [[UIView alloc] initWithFrame : CGRectMake (0, 0, 768, 1004)];

       UIImage* image1 = [[UIImage alloc] initWithContentsOfFile : @"image1.png"];
       UIImage* image2 = [[UIImage alloc] initWithContentsOfFile : @"image2.png"];

       imageView1 = [[UIImageView alloc] initWithImage : image1];
       imageView2 = [[UIImageView alloc] initWithImage : image2];

       [imageView1 setFrame : CGRectMake (0, 0, 768, 1004)];
       [imageView1 setFrame : CGRectMake (0, 0, 768, 1004)];

       [self.view addSubview : imageView1];

       [image2 release];
       [image1 release];
    }

    - (void) viewDidUnload
    {
       imageView2 = nil;
       imageView1 = nil;

       [super viewDidUnload];
    }

    - (void) touchesBegan : (NSSet*) touches withEvent : (UIEvent*) event
    {
       [UIView beginAnimations : nil context : nil];
       [UIView setAnimationCurve : UIViewAnimationCurveLinear];
       [UIView setAnimationDuration : 0.25];

       if (imageView1.superview != nil)
       {
          [UIView setAnimationTransition : UIViewAnimationTransitionCurlUp forView : self.view cache : YES];
          [imageView1 removeFromSuperview];
          [self.view addSubview : imageView2];
       }
       else
       {
          [UIView setAnimationTransition : UIViewAnimationTransitionCurlDown forView : self.view cache : YES];
          [imageView2 removeFromSuperview];
          [self.view addSubview : imageView1];
       }

       [UIView commitAnimations];
    }
 @end

Поскольку в этом примере UIViewController создается программно, метод loadView использовался для создания представления, управляемого контроллером представления иподпредставления, которыми будет управлять этот вид.Надеюсь, это поможет.Приветствия.

0 голосов
/ 07 июля 2010

Вы можете пропустить математику в большинстве ситуаций и позволить API работать со всем. Попробуйте этот код:

- (IBAction)showPeelBack:(id)sender{
    FooController *controller = [[CreditsController alloc] initWithNibName:@"Foo" bundle:nil];
    // setup the stuff you want to display
    [controller setViewController: self];

    controller.modalPresentationStyle = UIModalPresentationFullScreen;
    controller.modalTransitionStyle = UIModalTransitionStylePartialCurl;

    // note: I'm using a nav controller here
    [[self navigationController] presentModalViewController:controller animated:YES];
    [controller release];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...