0

時間を伝えるプログラムをXcodeで作成しました。秒が増加するにつれて(時間が進むにつれて)アニメーション化/成長し、秒が60に達すると(そして0に戻ると)再び開始する長方形が必要です。私は絵コンテを持っておらず、すでに始めているので、戻ってやり直したくありません。

インスタンスを使用しUIViewて「フレーム」プロパティをアニメーション化する必要がありますか?

これが私の時計コードです:

- (void)viewDidLoad
{
[self updateTime];

[super viewDidLoad];

hourFormatter = [[NSDateFormatter alloc] init];
hourFormatter.dateFormat = @"HH";
minuteFormatter = [[NSDateFormatter alloc] init];
minuteFormatter.dateFormat = @"mm";
secondFormatter = [[NSDateFormatter alloc] init];
secondFormatter.dateFormat = @"ss";    
}

- (void)updateTime {

[updateTimer invalidate];
updateTimer = nil;

currentTime = [NSDate date];
NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
[timeFormatter setTimeStyle:NSDateFormatterMediumStyle];

hourLabel.text = [hourFormatter stringFromDate: currentTime];
minuteLabel.text = [minuteFormatter stringFromDate: currentTime];
secondLabel.text = [secondFormatter stringFromDate: currentTime];

updateTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];
}
4

1 に答える 1

1

はい、 を使用してUIViewそのフレームをアニメートできます。

ただし、必ずしもタイマーを使用してこれを行う必要はありません。アニメーションを全期間実行し、フレームの高さを完全に変更するように設定し、タイマーを使用して次のアニメーションを再開するだけです。これにより、アニメーションが最も滑らかになります。

時間表示を更新するには、1 秒に 1 回実行するタイマーのみが必要です。

次のようにアニメーションを実行してみてください。

CGRect frame = self.expandingTimeView.frame;
frame.height = 0;
self.expandingTimeView.frame = frame;

[UIView animateWithDuration:60
                 animations:^{
    frame.height = MAX_FRAME_HEIGHT;
    self.expandingTimeView.frame = frame;
}];

ここに良いガイドがあります。

このコードはupdateTime、タイマーによって毎分呼び出されると想定しているメソッドに入れられます。expandingTimeViewビュー プロパティの名前を修正する必要がありMAX_FRAME_HEIGHT、アニメーション中にビューが成長する最大の高さに置き換える必要があります。

1 分ごとに呼び出されるビュー アニメーション ( updateTimeView) を含むメソッドと、1 秒ごとに呼び出されるラベル テキスト更新 ( updateTimeLabels) を含むメソッドの 2 つのメソッドが必要な場合があります。この場合、2 つのタイマーを作成する必要があります。viewWillAppear:

于 2013-05-19T17:30:03.987 に答える