J'ai une animation qui est lancée quand un geste reconnaissant (Double Tap) incendie: Ça fonctionne bien, sauf dans un cas: si J'ai juste Les méthodes déléguées elles-mêmes ne font rien, ils n'ont été ajoutés que pour voir où le problème pourrait être. P> Je n'ai aucune idée de pourquoi. p> Edit: Voici un vidéo de mon problème. Phase 1: Faites défiler avec décélération et phase 2 sans. Regardez une position finale. La phase 1 est correcte mais pas phase p> p> Scrollviewwillbegindecelerating code> Délégué La méthode n'est pas appelée avant l'exécution d'animation (juste en traînant à peine mon ScrollView). P>
ScrollViewDidenDendRagging CODE> METHODE appelée.Je peut attendre 20 secondes, puis jouer à mon animation. Ça va jouer correctement sauf pour mon
contentoffset code>. P>
4 Réponses :
Essayez: en dehors du bloc d'animation. Je ne crois pas que le contentoffset est animé via le bloc d'animation UIVIEW. P> EDIT:
Au lieu de: p> Essayez: p>
Non, car cela fonctionne à l'intérieur de mon bloc après un défilement avec décélération. Sans décélération, il est cassé. Et même si je le fais, le résultat serait moins agréable pour l'utilisateur (durée différente, car la mine est une constante et SetContentView: animée: n'est pas)
Hmm, d'accord ... Ce que je sens toujours comme si je ne comprends pas complètement le problème que vous rencontrez. Mais une autre façon d'animer le contentoffset est d'animer les limites. Et si vous essayez le code sur la modification, que se passe-t-il alors?
Thx mais même résultat. Regarde une ma vidéo;)
Essayez peut-être d'utiliser l'animation de base plutôt que des animations UIView. Il ne fera pas la différence si la raison pour laquelle vous rencontrez des ennuis est parce que toutes les animations sont supprimées du calque, mais si elle est due à - [RemoveanimationForkey: @ "limites"] code>, ceci pourrait être un gagnant.
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"bounds"];
animation.fromValue = [NSValue valueWithCGRect:_scrollView.layer.bounds];
animation.toValue = [NSValue valueWithCGRect:(CGRect){ .origin = CGPointMake(x,y), .size = scrollView.layer.bounds.size }];
[scrollView.layer addAnimation:animation forKey:@"myCustomScroll"];
scrollView.layer.bounds = (CGRect){ .origin = CGPointMake(x,y), .size = scrollView.layer.bounds.size };
Le chemin de clés est limites code> et vous définissez un point de la valeur, serait une erreur idiote # 1;)
Ah Yep, mon erreur. Ainsi la responsabilité de non-responsabilité.
Je ne suis pas sûr de comprendre complètement votre problème (vous pouvez peut-être essayer d'expliquer ce que vous voulez accomplir dans cette animation?). Toute façon, peut-être essayer cela au lieu d'utiliser setContentOffsetsset code>:
Je soupçonne que X dans cette ligne peut entraîner l'effet que vous voyez: Qu'est-ce que c'est la valeur? Je pense que vous devriez essayer de remplacer cela par CGPointMake (0, Y) et voyez si cela provoque que la marge blanche apparaisse à chaque fois. P> Mon raisonnement est le suivant: p> 1) à Créer un effet rebondissant qui ne sort pas de la portée de l'image (ne montre pas l'arrière-plan blanc), vous devez avoir défini 2) Pour permettre un défilement que vous avez défini le contenu 4) Lorsque vous utilisez probablement un cadre avec Coordonnée X pré-calculée pour positionner l'image sur la taille de gauche car sans que 5) dans le vid eo, lors de la première exécution de l'animation la première fois, vous avez 6) Dans la vidéo Lorsque vous exécutez l'animation pour la deuxième fois, vous avez 7) Lorsque l'animation est terminée, vous avez toujours la même taille de contenu pour votre ScrollView et donc la même quantité de défilement disponible. Si vous avez le 8) Si X dans Si j'ai raison, alors Voici comment vous pourriez le résoudre strong>: P> A) si vous voulez L'image toujours à apparaître sur une position x spécifique, assurez-vous de définir constante contentoffset dans l'animation. p> b) Ajustez le code de cadre de calcul ( c) Si après l'animation, vous ne voulez pas que le contenu soit défilable, assurez-vous de définir < code> _scrollview.ContSeSize = _scrollview.bounds.Size; code> i n le bloc d'animation. P> p> _scrollview code> 'S
contentint.Width code> moins que le Taille réelle de l'image. p>
contenu.width code> supérieur à la largeur du
_scrollview code> p> p> < p> 3) Vous avez centré l'image dans le
_scrollview code> relativement à la taille de son
contenu sur code> p>
catransform3dmakescale code> ne quitterait pas l'image au centre (en passant, pourquoi utiliser
catransform3dmakescale code>, lorsque vous pourrait simplement changer la taille dans le cadre?) p>
contentoffset.x code> à sa valeur maximale (car vous faites glisser vers la gauche, augmentez donc le décalage de contenu et la vision de ScrollView retourner à son compensation de contenu max t aller au-delà des limites de la taille du contenu) p>
contentoffset.x code> avec une valeur inférieure car vous faites glisser vers la droite En diminuant p>
contentoffset.x code> à sa valeur maximale, l'image sera plus à gauche si vous avez contentoffset.x avec moins de valeur - l'image sera plus sur la droite p>
_scrollview.Contentounffset = cgPointMake (x, y); code> est lié au décalage du contenu réel avant l'animation, il est logique que l'image apparaisse plus à gauche dans le premier cas et plus sur la droite dans le second cas. P>
OFFRAME code>) d'origine selon le contenuOffset que vous allez vous animer (on dirait maintenant, cela ne fonctionne que avec le contenu maximum de contentoffset.x). p>
Dites-vous que parfois ScrollViewWillbegindecelerating n'est pas appelé?
Non c'est normal. J'arrête directement mon défilement afin que cela n'aura pas d'effet de décélération. Alors, quand je fais que mon animation est cassée. Mais mon geste a décélérateur implicitement ça marche. Je ne sais pas si je claire ...
S'il vous plaît pouvez-vous mettre à jour votre question pour montrer où et quand vous appelez cette animation?
Je voulais dire quelles méthodes vous l'appelez, mais la vidéo aidez!
Je fais défiler et après (il peut être 2 secondes ou 10 min) Je lance mon bloc d'animation à partir d'un geste (Uitapaveture double Tap).
Très bien cool. La vidéo aide. Cependant, pouvons-nous voir quelques extraits de code. Particulièrement vos méthodes Uiscrolldelegate?
Oui parce qu'il n'y a rien à l'intérieur d'eux. Je viens de mettre mon délégué pour voir où mon problème était
J'ai mis à jour votre question basée sur vos commentaires. Le fait que vous appeliez l'animation d'un reconnaisseur de geste était important. Si j'ai quelque chose de mal, veuillez ré-modifier.
OK merci. Alors tu penses que ça vient du geste?
Dans ma compréhension de votre vidéo, la vue a une bg rouge est le _scrollviewcontentview.et the ScrollView est la vue noire, suis-je raison?
@Stevenjiang oui c'est vrai
@Pierre et votre objectif est de faire connaître le ScrollView zoomé et animé à une position à gauche à l'écran? Et pourriez-vous partager votre exemple de projet dans la vidéo?
@Stevenjiang je ne peux pas: / et oui c'est mon objectif