5

Próbuję zaimplementować animację: po wejściu do galerii iPhone'a, naciśnij obraz, zobaczysz obraz pełnoekranowy. Poniżej widoczny jest pasek narzędzi z przyciskiem kosza. Po naciśnięciu tego przycisku obraz jest usuwany z animacją. Próbuję to zaimplementować, ale nie wiem, jak zaimplementować transformację obrazu, użycie jabłka. To najlepsze, co mogłem zrobić:Animacja, na przykład po usunięciu z galerii zdjęć iPhone'a

[UIView transitionWithView:self.view duration:0.1 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
     [self.view addSubview:scrollImageView]; 
    } completion:^(BOOL finished) { 
     [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
      CGRect frame = scrollImageView.frame; 
      frame.size = CGSizeMake(frame.size.width * 0.75, frame.size.height * 0.75); 
      frame.origin = CGPointMake((size.width - frame.size.width)/2, (size.height - frame.size.height)/2); 
      scrollImageView.frame = frame; 
     } completion:^(BOOL finished) { 
      [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
       CGRect frame = scrollImageView.frame; 
       frame.size = CGSizeMake(frame.size.width * 0.05, frame.size.height * 0.05); 
       frame.origin = CGPointMake(size.width, size.height); 
       scrollImageView.frame = frame; 
       CGAffineTransform transform = scrollImageView.transform; 
       CGAffineTransform rotatedTransform = CGAffineTransformRotate(transform, 45 * 3.14/180); 
       scrollImageView.transform = rotatedTransform; 
      } completion:^(BOOL finished) { 
       [scrollImageView removeFromSuperview]; 
      }]; 
     }]; 
    }]; 

Z góry dziękuję.

Aktualizacja Jak rozumiem, nie mogę zrobić animację z rdzeniem animacja, ale może ktoś może mi doradzić animację najbardziej simular do iPhone galerii animacji, ale bez użycia OpenGL?

Odpowiedz

3

W tym momencie animacja, o której mówisz, nie może być wykonana za pomocą Core Animation lub UIKit. Będziesz musiał użyć OpenGL i zastosować obraz jako teksturę i tam zrobić swoją animację.

+0

Czy możesz doradzić mi animację najbardziej podobną do animacji galerii iPhone, ale bez korzystania z OpenGL? –

+0

Poprzednio zrobiłem [post na blogu] (http://ronnqvist.tumblr.com/post/23234805389/unobtrusive-hints-of-joy) próbując skopiować animację "Otwórz w tle" z Safari. Jest dość podobny, ale jednocześnie bardzo odmienny. Możesz prawdopodobnie nauczyć się z niego czegoś i dostosować części potrzebne do animacji. –

6

Można użyć poniższy przykład dla tej animacji:

UIView *senderView = (UIView*)sender; 

CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"]; 
      anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
      anim.duration = 0.125; 
      anim.repeatCount = 1; 
      anim.autoreverses = YES; 
      anim.removedOnCompletion = YES; 
      anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.2, 1.2, 1.0)]; 
      //[senderView.layer addAnimation:anim forKey:nil]; 


UIBezierPath *movePath = [UIBezierPath bezierPath]; 
      [movePath moveToPoint:icon.center]; 
      [movePath addQuadCurveToPoint:senderView.center 
          controlPoint:CGPointMake(senderView.center.x, icon.center.y)]; 

      CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
      moveAnim.path = movePath.CGPath; 
      moveAnim.removedOnCompletion = YES; 

      CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform"]; 
      scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; 
      scaleAnim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)]; 
      scaleAnim.removedOnCompletion = YES; 

      CABasicAnimation *opacityAnim = [CABasicAnimation animationWithKeyPath:@"alpha"]; 
      opacityAnim.fromValue = [NSNumber numberWithFloat:1.0]; 
      opacityAnim.toValue = [NSNumber numberWithFloat:0.1]; 
      opacityAnim.removedOnCompletion = YES; 

      CAAnimationGroup *animGroup = [CAAnimationGroup animation]; 
      animGroup.animations = [NSArray arrayWithObjects:moveAnim, scaleAnim, opacityAnim, nil]; 
      animGroup.duration = 0.5; 
      [icon.layer addAnimation:animGroup forKey:nil]; 

Mam zmodyfikowany kod, trzeba wykonać następujące zmiany w nim ustawić widok nadawcy jako self.view i zmienić punkt końcowy animacja (która jest obecnie senderView.center) zgodnie z wymaganiami

+0

Proszę, możesz zmienić swój przykład, używając mojego scrollImageView i self.view. Ponieważ próbowałem użyć scrollImageView zamiast ikony, a animacja jest okropna, myślę, że czegoś nie rozumiem. –

+0

@Paul Galavic - Czy zrobiłem ten rodzaj animacji? Jestem ciekawy wiedzieć. Ja także chcę go zaimplementować. – TheFlash

0

Myślę, że mówisz o animacji przejścia "ssać".

Możliwe jest wyzwolenie go, ale jest to przejście prywatne, a Apple może odrzucić aplikację, jeśli jej używasz.

Kod ten należy to zrobić za pomocą kodu przejściowy 103:

[UIView beginAnimations: kontekst zero: puste]; [UIView setAnimationDuration: 1.0]; [UIView setAnimationTransition: transtionIndex forView: containerView cache: NO]; [containerView addSubview: newView]; [oldView removeFromSuperview]; [UIView commitAnimations];

Albo szukaj netto dla przejścia Rdzeń obrazu o nazwie „suckEffect”

4

Wiem, że trochę późno. Ale powinieneś sprawdzić rozwiązanie Ciechana o nazwie BCGenieEffect. Można go znaleźć here. Jest to czysty rdzeń animacji i bardzo łatwy do zrozumienia. Myślę, że tego właśnie szukasz.

Powodzenia