J'ai un iOS UIView avec UIViewAnimationTransitionFlipFromRight
. J'ai besoin de retourner à la verticale. La page curl transition ne sera pas coupé. Je suppose que cela va exiger quelque chose de personnalisé.
Des idées?
J'ai un iOS UIView avec UIViewAnimationTransitionFlipFromRight
. J'ai besoin de retourner à la verticale. La page curl transition ne sera pas coupé. Je suppose que cela va exiger quelque chose de personnalisé.
Des idées?
Il suffit d'écrire votre propre méthode pour le flip utilisation de Core Animation Transforme.
- (void)verticalFlip{
[UIView animateWithDuration:someDuration delay:someDelay animations:^{
yourView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0);
} completion:^{
// code to be executed when flip is completed
}];
}
Assurez-vous que vous avez le Cœur de l'Animation des bibliothèques/cadres ajoutée et comprises et ont également inclus math.h
si vous souhaitez utiliser l' M_PI
de la notation.
EDIT:
Pour avoir l'essentiel, de "changer" le point de vue lorsqu'il est à mi-chemin retourné faire quelque chose comme ceci:
- (void)verticalFlip{
[UIView animateWithDuration:someDuration delay:someDelay animations:^{
yourView.layer.transform = CATransform3DMakeRotation(M_PI_2,1.0,0.0,0.0); //flip halfway
} completion:^{
while ([yourView.subviews count] > 0)
[[yourView.subviews lastObject] removeFromSuperview]; // remove all subviews
// Add your new views here
[UIView animateWithDuration:someDuration delay:someDelay animations:^{
yourView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0); //finish the flip
} completion:^{
// Flip completion code here
}];
}];
}
Cela pourrait aussi faire:
- (void)verticalFlip{
// Do the first half of the flip
[UIView animateWithDuration:someDuration delay:someDelay animations:^{
yourView.layer.transform = CATransform3DMakeRotation(M_PI_2,1.0,0.0,0.0); //flip halfway
} completion:^{
while ([yourView.subviews count] > 0)
[[yourView.subviews lastObject] removeFromSuperview]; // remove all subviews
// Add your new views here
}];
// After a delay equal to the duration+delay of the first half of the flip, complete the flip
[UIView animateWithDuration:someDuration delay:durationOfFirstAnimation animations:^{
yourView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0); //finish the flip
} completion:^{
// Flip completion code here
}];
}
Des acclamations.
Comme d'iOS 5.0, il n'y a pas besoin d'écrire votre propre centre d'Animation de la transformation de ne vertical retourne. Utilisez simplement UIKit de l' UIViewAnimationOptionTransitionFlipFromTop
et UIViewAnimationOptionTransitionFlipFromBottom
transitions, et tout ça devient un simple appel de méthode.
Ces comporter analagously d' UIViewAnimationOptionTransitionFlipFromLeft
et UIViewAnimationOptionTransitionFlipFromRight
(qui ont été autour depuis iOS 2.0).
Exemple d'utilisation:
[UIView transitionFromView:viewToReplace
toView:replacementView
duration:1
options:UIViewAnimationOptionTransitionFlipFromBottom
completion:nil];
Le code ci-dessus à la verticale flip le superview d' viewToReplace
. À mi-chemin dans l'animation, à l'instant où le superview est perpendiculaire à l'écran et donc invisible, viewToReplace
sera remplacé par replacementView
.
C'est tout simple.
Le code de Brenton ne fonctionne pas pour moi donc j'ai fait un peu plus de creuser par le biais de l'apple docs et trouvé ce morceau de code:
- (IBAction)toggleMainViews:(id)sender {
[UIView transitionFromView:(displayingPrimary ? primaryView : secondaryView)
toView:(displayingPrimary ? secondaryView : primaryView)
duration:1.0
options:(displayingPrimary ?
UIViewAnimationOptionTransitionFlipFromRight :
UIViewAnimationOptionTransitionFlipFromLeft)
completion:^(BOOL finished) {
if (finished) {
displayingPrimary = !displayingPrimary;
}
}
];
}
A travaillé comme un charme.
UIViewAnimationOptionTransitionFlipfromtop est facile à utiliser, mais nous ne pouvons pas créer un interactif de transition à l'aide de UIViewAnimationOptionTransitionFlipfromtop. Nous avons besoin de changer de transformation du calque pour créer un interactif de transition.
Il suffit de créer une transformation à l'aide de CATransform3DMakeRotation n'est pas assez, pas d'effet de lumière, pas de point de vue. J'écris un exemple pour ajouter de l'effet. Vous pouvez modifier interactif de transition facilement.
Démo:
Exemple de code:
CALayer *sideALayer = sideAView.layer;
CALayer *sideBLayer = sideBView.layer;
CALayer *containerLayer = containerView.layer;
sideALayer.opacity = 1;
sideBLayer.opacity = 0;
sideBLayer.transform = CATransform3DMakeRotation(M_PI, 0, 1, 0);
containerLayer.transform = CATransform3DIdentity;
CATransform3D perspectiveTransform = CATransform3DIdentity;
perspectiveTransform.m34 = -1.0 / containerViewWidth;
[UIView animateKeyframesWithDuration:1 delay:0 options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{
[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0.5 animations:^{
sideALayer.opacity = 0;
containerLayer.transform = CATransform3DConcat(perspectiveTransform,CATransform3DMakeRotation(M_PI_2, 0, 1, 0));
}];
[UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.5 animations:^{
sideBLayer.opacity = 1;
containerLayer.transform = CATransform3DConcat(perspectiveTransform, CATransform3DMakeRotation(M_PI, 0, 1, 0));
}];
} completion:nil];
sideAView et sideBView sont des sous-vues de containerView.
Le containerView est de définir un arrière-plan noir.
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.75];
// checks to see if the view is attached
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
forView:flipLabel
cache:YES];
flipLabel.backgroundColor = [UIColor yellowColor];
[UIView commitAnimations];
Vous pouvez apporter toute modification que vous souhaitez tout retournement de point de vue, Ici j'ai changer la couleur d'arrière-plan
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.