Utilisation des graphiques de base et de l’animation principale dans Xamarin.iOS
Pour cette procédure pas à pas, nous allons dessiner un chemin à l’aide de Core Graphics en réponse à l’entrée tactile. Ensuite, nous allons ajouter une CALayer
image contenant une image que nous animerons le long du chemin.
La capture d’écran suivante présente l’application terminée :
Dessin d’un chemin
Ajoutez
DemoView
uneCGPath
variable à la classe et instanciez-la dans le constructeur. Déclarez également deuxCGPoint
variables etlatestPoint
initialPoint
, que nous allons utiliser pour capturer le point tactile à partir duquel nous construisons le chemin :public class DemoView : UIView { CGPath path; CGPoint initialPoint; CGPoint latestPoint; public DemoView () { BackgroundColor = UIColor.White; path = new CGPath (); } }
Ajoutez les directives using suivantes :
using CoreGraphics; using CoreAnimation; using Foundation;
Ensuite, remplacez
TouchesBegan
etTouchesMoved,
ajoutez les implémentations suivantes pour capturer le point tactile initial et chaque point tactile suivant respectivement :public override void TouchesBegan (NSSet touches, UIEvent evt){ base.TouchesBegan (touches, evt); UITouch touch = touches.AnyObject as UITouch; if (touch != null) { initialPoint = touch.LocationInView (this); } } public override void TouchesMoved (NSSet touches, UIEvent evt){ base.TouchesMoved (touches, evt); UITouch touch = touches.AnyObject as UITouch; if (touch != null) { latestPoint = touch.LocationInView (this); SetNeedsDisplay (); } }
SetNeedsDisplay
sera appelé chaque fois que les touches se déplacent afinDraw
d’être appelées sur la passe de boucle d’exécution suivante.Nous allons ajouter des lignes au chemin d’accès dans la
Draw
méthode et utiliser une ligne rouge et en pointillés pour dessiner avec. ImplémentezDraw
avec le code indiqué ci-dessous :public override void Draw (CGRect rect){ base.Draw (rect); if (!initialPoint.IsEmpty) { //get graphics context using(CGContext g = UIGraphics.GetCurrentContext ()){ //set up drawing attributes g.SetLineWidth (2); UIColor.Red.SetStroke (); //add lines to the touch points if (path.IsEmpty) { path.AddLines (new CGPoint[]{initialPoint, latestPoint}); } else { path.AddLineToPoint (latestPoint); } //use a dashed line g.SetLineDash (0, new nfloat[] { 5, 2 * (nfloat)Math.PI }); //add geometry to graphics context and draw it g.AddPath (path); g.DrawPath (CGPathDrawingMode.Stroke); } } }
Si nous exécutons l’application maintenant, nous pouvons toucher pour dessiner sur l’écran, comme illustré dans la capture d’écran suivante :
Animation le long d’un chemin
Maintenant que nous avons implémenté le code pour permettre aux utilisateurs de dessiner le chemin, nous allons ajouter le code pour animer une couche le long du chemin dessiné.
Tout d’abord, ajoutez une
CALayer
variable à la classe et créez-la dans le constructeur :public class DemoView : UIView { … CALayer layer; public DemoView (){ … //create layer layer = new CALayer (); layer.Bounds = new CGRect (0, 0, 50, 50); layer.Position = new CGPoint (50, 50); layer.Contents = UIImage.FromFile ("monkey.png").CGImage; layer.ContentsGravity = CALayer.GravityResizeAspect; layer.BorderWidth = 1.5f; layer.CornerRadius = 5; layer.BorderColor = UIColor.Blue.CGColor; layer.BackgroundColor = UIColor.Purple.CGColor; }
Ensuite, nous allons ajouter la couche en tant que sous-couche de la couche de la vue lorsque l’utilisateur soulève son doigt à partir de l’écran. Ensuite, nous allons créer une animation d’images clés à l’aide du chemin d’accès
Position
, animant le calque.Pour ce faire, nous devons remplacer le
TouchesEnded
code et ajouter le code suivant :public override void TouchesEnded (NSSet touches, UIEvent evt) { base.TouchesEnded (touches, evt); //add layer with image and animate along path if (layer.SuperLayer == null) Layer.AddSublayer (layer); // create a keyframe animation for the position using the path layer.Position = latestPoint; CAKeyFrameAnimation animPosition = (CAKeyFrameAnimation)CAKeyFrameAnimation.FromKeyPath ("position"); animPosition.Path = path; animPosition.Duration = 3; layer.AddAnimation (animPosition, "position"); }
Exécutez l’application maintenant et après le dessin, une couche avec une image est ajoutée et se déplace le long du tracé dessiné :
Résumé
Dans cet article, nous avons parcouru un exemple qui a lié des concepts graphiques et d’animation ensemble. Tout d’abord, nous avons montré comment utiliser Core Graphics pour dessiner un chemin dans une UIView
réponse à l’interaction utilisateur. Ensuite, nous avons montré comment utiliser Core Animation pour faire un voyage d’image le long de ce chemin.