113 votes

effet de parallaxe iOS 7 dans ma vue contrôleur

Je développe une application pour iOS 7 en Objective-C. J’ai un écran dans mon application avec quelques boutons et une image d’arrière-plan jolie. (C’est un simple xib avec UIButtons sur le dessus un UIImageView).

Je pensais que ce serait cool si ces boutons eu l’effet de parallaxe que l’écran d’accueil iOS 7, donc si vous inclinez le téléphone vous avez pu voir à l’arrière-plan.

Comment puis-je mettre en œuvre cet effet dans mon application ?

274voto

veducm Points 2288

Avec iOS 7, Apple a introduit UIMotionEffect d'ajouter des effets de Mouvement qui sont liées à l'orientation de l'appareil de l'utilisateur. Par exemple, pour imiter l'effet de parallaxe sur l'écran d'accueil, vous pouvez utiliser la sous-classe UIInterpolationMotionEffect, comme expliqué ici et ici, juste avec quelques lignes de code:

// Set vertical effect
UIInterpolatingMotionEffect *verticalMotionEffect = 
  [[UIInterpolatingMotionEffect alloc] 
  initWithKeyPath:@"center.y"
             type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
verticalMotionEffect.minimumRelativeValue = @(-10);
verticalMotionEffect.maximumRelativeValue = @(10);

// Set horizontal effect 
UIInterpolatingMotionEffect *horizontalMotionEffect = 
  [[UIInterpolatingMotionEffect alloc] 
  initWithKeyPath:@"center.x"     
             type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
horizontalMotionEffect.minimumRelativeValue = @(-10);
horizontalMotionEffect.maximumRelativeValue = @(10);

// Create group to combine both
UIMotionEffectGroup *group = [UIMotionEffectGroup new];
group.motionEffects = @[horizontalMotionEffect, verticalMotionEffect];

// Add both effects to your view
[myBackgroundView addMotionEffect:group];

Aussi, vous pouvez trouver un tas de bibliothèques pour le faire plus facilement ou pour ajouter cette fonctionnalité à d'anciennes versions iOS:

7voto

BooHoo Points 47

Solution Veducms peut être un peu plus courte. Le UIMotionEffectGroup pour sa x et y, le mouvement est obsolète si vous ajoutez le x et axe des y motionEffects séparément.

6voto

damithH Points 956
const static CGFloat kCustomIOS7MotionEffectExtent = 10.0; 

- (void)applyMotionEffects:(UIView *YOUR_VIEW) {
     if (NSClassFromString(@"UIInterpolatingMotionEffect")) {
         UIInterpolatingMotionEffect *horizontalEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x"
                                                                                                        type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
         horizontalEffect.minimumRelativeValue = @(-kCustomIOS7MotionEffectExtent);
         horizontalEffect.maximumRelativeValue = @( kCustomIOS7MotionEffectExtent);
         UIInterpolatingMotionEffect *verticalEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y"
                                                                                                      type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
         verticalEffect.minimumRelativeValue = @(-kCustomIOS7MotionEffectExtent);
         verticalEffect.maximumRelativeValue = @( kCustomIOS7MotionEffectExtent);
         UIMotionEffectGroup *motionEffectGroup = [[UIMotionEffectGroup alloc] init];
         motionEffectGroup.motionEffects = @[horizontalEffect, verticalEffect]; 
         [YOUR_VIEW addMotionEffect:motionEffectGroup];
     }
}

5voto

Bejil Points 211

Voici une catégorie facile d’intégrer l’effet sur iOs7 + :

https://github.com/jvenegas/TLMotionEffect

4voto

Dan Fabulich Points 6143

UIMotionEffect fournit une implémentation de parallaxe gratuit sur iOS 7.

http://www.teehanlax.com/blog/Introduction-to-uimotioneffect/

https://github.com/michaeljbishop/NGAParallaxMotion vous permet de définir simplement l’intensité de la parallaxe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X