Ich möchte die Position einer Ansicht abrufen, während sie animiert wird und von einer Position zur anderen wechselt Ich habe versucht, die presentationLayer zu verwenden, um die Informationen zum Aktionsort abzurufen und den Standort zu drucken, wenn sich die UIView bewegt . HierWarum funktioniert die PresentationLayer einer Ansicht nicht korrekt für mich?
ist das, was den Ausdruck:
2010-12-08 16:56:50.496 Exp[31219:207] point: NSPoint: {45, 45}
2010-12-08 16:56:50.696 Exp[31219:207] point: NSPoint: {45, 45}
2010-12-08 16:56:50.896 Exp[31219:207] point: NSPoint: {45, 45}
2010-12-08 16:56:51.096 Exp[31219:207] point: NSPoint: {45, 45}
2010-12-08 16:56:51.296 Exp[31219:207] point: NSPoint: {45, 45}
2010-12-08 16:56:51.496 Exp[31219:207] point: NSPoint: {245, 245} <<----------------------------------------
2010-12-08 16:56:51.696 Exp[31219:207] point: NSPoint: {245, 245}
2010-12-08 16:56:51.896 Exp[31219:207] point: NSPoint: {245, 245}
2010-12-08 16:56:52.096 Exp[31219:207] point: NSPoint: {245, 245}
Bekanntmachung der Pfeil wird der Endpunkt direkt ausgedruckt ohne Punkte auf dem Weg zeigt. Kann jemand helfen?
unten ist mein Code:
Hier sind, wie es gedruckt wird:
-(void)print
{ NSLog([NSMutableString stringWithFormat:@"point: %@",[NSValue valueWithCGPoint:((CALayer *)[bomb.layer presentationLayer]).position]]);
}
ich einen Timer verwendet, um immer wieder aus der animierten Ansicht "Bombe"
-(id)initWithCoder:(NSCoder *)aDecoder
{ if (self=[super initWithCoder:aDecoder]) {
bomb = [[BombView alloc]init];
bomb.frame = CGRectMake(30, 30, 30, 30);
bomb.backgroundColor = [UIColor yellowColor];
[self addSubview:bomb];
timer = [NSTimer timerWithTimeInterval:PRINTINTERVAL // defined to be 0.2
target: self
selector: @selector(print)
userInfo: nil
repeats: YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode: NSDefaultRunLoopMode];
}
return self;
}
Hier ist, wie es animiert ist: -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = 10.0;
animation.delegate = bomb;
[bomb.layer addAnimation:animation forKey:@"animatePosition"];
bomb.center = CGPointMake(bomb.center.x+200, bomb.center.y+200);
}
Wenn ich klicke, wird sich die "Bombe" bewegen und die ausgedruckte Information sollte sich allmählich ändern. Weil es sich innerhalb von 10 Sekunden mit so geringer Geschwindigkeit bewegt.
Es bewegt sich gut, druckt aber nicht korrekt.