2013-05-19 2 views
0

Я сделал программу в Xcode, которая сообщает время. Я хочу иметь прямоугольник, который оживляет/растет дольше по мере увеличения секунд (время прогрессирует) и начинается снова, когда секунды достигают 60 (и возвращаются к 0). У меня нет раскадровки и уже началось, поэтому я не хочу возвращаться и начинать снова.Анимация UIView в файле .xib

Должен ли я использовать экземпляр UIView и анимировать свойство 'frame'?

Вот мои часы Код:

- (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]; 
} 
+0

Должен ли я использовать экземпляр UIView и анимировать свойство 'frame'? – user2397282

ответ

1

Да, вы можете использовать UIView и анимировать его рамку.

Вам не обязательно делать это с помощью таймера, но просто установите анимацию для полной продолжительности и полного изменения высоты кадра и используйте таймер для перезапуска следующей анимации. Это даст самую плавную анимацию.

Для обновления отображения времени вам нужен только таймер, работающий один раз в секунду.

Посмотрите на запуск анимации, как это:

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; 
}]; 

Там хороший гид here.

Этот код будет использоваться в вашем методе updateTime, который, как я предполагаю, будет вызываться каждую минуту таймером. Вам нужно исправить имя expandingTimeView для любого свойства вашего вида, и вам нужно заменить MAX_FRAME_HEIGHT с максимальной высотой, которую должен выглядеть вид во время анимации.

Возможно, у вас есть 2 метода, 1, содержащий анимацию вида (updateTimeView), называемую каждую минуту и ​​1, содержащую обновление текста меток (updateTimeLabels), называемое каждую секунду. В этом случае 2 таймера необходимо создать в viewWillAppear:

+0

Если это не так уж сложно, не могли бы вы показать мне, как я объявлю и реализую эту анимацию? Спасибо – user2397282

+0

Извините, я действительно новичок в Objective-C; Я объявил UIView и связал его с файлом .xib. Где я должен размещать ваш код, и нужно ли мне объявлять что-либо новое, изменять имена переменных и т. Д.? – user2397282