私は、毎秒更新されるこのように、時計の針に秒針の動きを表示しようとしているiPadアプリに取り組んでいます。
- (void) updateClock:(NSTimer *)theTimer{
dateComponents = [[NSCalendar currentCalendar] components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[NSDate date]];
seconds = [dateComponents second];
minutes = [dateComponents minute];
hours = [dateComponents hour];
secAngle = Degrees2Radians(seconds/60.0*360);
minAngle = Degrees2Radians(minutes/60.0*360);
hourAngle = Degrees2Radians(hours/24.0*360) + minAngle/24.0;
secHand.transform = CATransform3DMakeRotation (secAngle+M_PI, 0, 0, 1);
hourHand.transform = CATransform3DMakeRotation (hourAngle+M_PI, 0, 0, 1);
minHand.transform = CATransform3DMakeRotation (minAngle+M_PI, 0, 0, 1);
}
- (void)start{
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateClock:) userInfo:nil repeats:YES];
}
ただし、現在の動作方法では、毎秒カチカチ音をたてているように見えます。しかし、私が本当に欲しいのは、レイヤーをアニメーション化して、1 分間で 0 から 360 までスムーズに 0 から 360 まで完全に回転して連続的に動いているように見えるようにすることです。回転するので、秒針には次のものを使用しました。
-(void)startSmooth{
started = YES;
CABasicAnimation *fullRotation;
fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
fullRotation.fromValue = [NSNumber numberWithFloat:0];
fullRotation.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)];
fullRotation.duration = 60.0f;
fullRotation.repeatCount = HUGE_VALF;
[secHand addAnimation:fullRotation forKey:@"360"];
}
ただし、これに関する問題は、常に 0 度の角度で回転を開始するため、針は、時間に関係なく常に 30 秒から動き始めているように見えることです。
私がやりたいのは、秒針があるはずの実際のポイントから開始することです。どうすればそれを達成できますか?