Ich nähere mich der Kernanimation und dem Zeichnen empirisch. Ich versuche, eine einfache Form zu animieren; die fragliche Form besteht aus 3 Linien und einer Bezier-Kurve. Eine rote Linie ist auch gezeichnet, um die Kurve Kontrollpunkte zeigen.
Alt-Text http://img.skitch.com/20091119-1ufar435jdq7nwh8pid5cb6kmm.jpg
Mein Hauptcontroller fügt einfach diese Unteransicht hinzu und ruft die adjustWave
Methode, wenn touchesEnd
. Hier ist der Code für meine Klasse zum Zeichnen von Formen. Wie Sie sehen, hat die Klasse eine Eigenschaft, cp1x (das x des Bezier-Kontrollpunkts 1). Dies ist der Wert, den ich gerne animieren würde. Geist, das ist ein dummer Versuch ...
- (void)drawRect:(CGRect)rect {
float cp1y = 230.0f;
float cp2x = 100.0f;
float cp2y = 120.0f;
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextClearRect(ctx, rect);
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 10.0f, 200.0f);
CGPathAddCurveToPoint (path, NULL, cp1x, cp1y, cp2x, cp2y, 300.0f, 200.0f);
CGPathAddLineToPoint(path, NULL, 300.0f, 300.0f);
CGPathAddLineToPoint(path, NULL, 10.0f, 300.0f);
CGPathCloseSubpath(path);
CGContextSetFillColorWithColor(ctx, [UIColor blueColor].CGColor);
CGContextAddPath(ctx, path);
CGContextFillPath(ctx);
// Drawing a line from control points 1 and 2
CGContextBeginPath(ctx);
CGContextSetRGBStrokeColor(ctx,1,0,0,1);
CGMutablePathRef cp1 = CGPathCreateMutable();
CGPathMoveToPoint(cp1, NULL, cp1x, cp1y);
CGPathAddLineToPoint(cp1, NULL, cp2x, cp2y);
CGPathCloseSubpath(cp1);
CGContextAddPath(ctx, cp1);
CGContextStrokePath(ctx);
}
- (void)adjustWave {
[UIView beginAnimations:@"movement" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationWillStartSelector:@selector(didStart:context:)];
[UIView setAnimationDidStopSelector:@selector(didStop:finished:context:)];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:3.0f];
[UIView setAnimationRepeatCount:3];
[UIView setAnimationRepeatAutoreverses:YES];
cp1x = cp1x + 20.0f;
[UIView commitAnimations];
}
Die Form ändert sich nicht. Wenn ich dagegen den CA-Code herausnehme und in der letzten Methode ein einfaches `[self setNeedsDisplay] einfüge, ändert sich die Form, aber offensichtlich ohne CA. Können Sie mir helfen? Ich bin sicher, dass ich hier einen sehr grundlegenden Fehler mache Vielen Dank im Voraus, Davide