2014-12-08 3 views
0

Для некоторой забавы и практики я пытаюсь сделать простое приложение iOS для аналоговых часов. Во всяком случае, у меня проблема с CGAffineTransformMakeRotation, она просто не работает. Чтобы начать с, я вращаю вторую руку. Но он просто держит руку в одном месте.CGAffineTransformMakeRotation не работает - UIImageView - iOS

Как я могу это сделать?

Хорошо по кругу есть 360 градусов, поэтому в каждую секунду есть (60/360) 0.16666666666 градусов.

Затем я преобразую это значение в радианы, а затем умножаю его на текущий второй счетчик. Но это на самом деле не работает :(

Вот мой код:

-(void)update_the_timer { 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"hh:mm:ss a"]; 
time_label.text = [formatter stringFromDate:[NSDate date]]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"hh:mm:ss"]; 

NSString *test = [dateFormatter stringFromDate:[NSDate date]]; 
NSDate *time = [dateFormatter dateFromString:test]; 

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *components = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate: time]; 

NSInteger seconds = [components second]; 


// Convert degrees to radians: x * M_PI/180.0 
float number = ((0.16666666666 * (M_PI/180.0)) * seconds); 
NSLog(@"%f", number); 

[UIView animateWithDuration:1.0 animations:^{ 
    second_handle.transform = CGAffineTransformMakeRotation(number); 
}]; 
} 

Что я делаю не так ??

Спасибо за ваше время, Дэн :)

+0

FYI - не связанный с вашей проблемой, но вы не должны воссоздавать свои форматиры даты снова и снова. Создайте их один раз и сохраните их в переменных экземпляра, чтобы вы могли повторно использовать их снова и снова. Они дороги для создания. Кроме того, не называйте '[NSDate date]' дважды. Вызовите его один раз и сохраните в переменной. Это более эффективно, и каждый из них использует работу с той же датой каждый раз. – rmaddy

+0

@rmaddy Спасибо за совет. Я обязательно это сделаю. Еще раз спасибо. – Supertecnoboff

+0

У этого есть несколько примеров: http://www.raywenderlich.com/5478/uiview-animation-tutorial-practical-recipes –

ответ

0

Я думаю, вам просто нужно пересчитать секунды до градуса на голове до конвертации в радианы, в каждую секунду есть 6 градусов:

float number = (M_PI/180.0) * seconds * 6; 
Смежные вопросы