2012-06-28 4 views
2

Я пытаюсь повернуть NSButton по часовой стрелке до тех пор, пока пользователь не рунет его вручную. Вот код, который я использую для этого. Я знаю, что это работало в какой-то момент. Любая идея, как это исправить? Заранее спасибо!Вращайте NSButton по часовой стрелке с анимацией

 

    CABasicAnimation *a = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    a.fromValue = [NSNumber numberWithFloat:0]; 
    a.toValue = [NSNumber numberWithFloat:-M_PI*2]; 
    [self.reloadButton.layer setAnchorPoint:CGPointMake(0.5, 0.5)]; 
    a.duration = 2.0; // seconds 
    a.repeatCount = HUGE_VAL; 
    [self.reloadButton.layer addAnimation:a forKey:nil]; 
 
+0

для будущих чтений. Этот сайт представляет собой iOS-анимацию на http://www.apeth.com/iOSBook/ch17.html –

+0

Спасибо за помощь, но код выше для NSButton не UIButton. – hishboy

+0

http://stackoverflow.com/questions/7278852/animated-rotation-of-nsview-contents –

ответ

-2

[EDIT1]

После того, видя, что это для NS против кнопки пользовательского интерфейса, есть несколько вариантов:

1) Используйте NSTimer и правильную процедуру поворота для вас OSX версии (см ссылку ниже)

http://digerati-illuminatus.blogspot.com/2009/09/how-do-you-rotate-nsbutton-nstextfield.html

2) Есл g OSX 10.5 или выше CoreAnimation была поддержана, и нижеследующее должно поддерживаться для NSButtons.

Wiki Ссылка

http://en.wikipedia.org/wiki/Core_Animation

[ОРИГИНАЛ] Попробуйте этот код вместо:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:5000000]; 
CGAffineTransform rr=CGAffineTransformMakeRotation(5000000); 
reloadButton.transform=CGAffineTransformConcat(reloadButton.transform, rr); 
[UIView commitAnimations]; 

Вот ссылка на SO вопрос, который показывает, как методы

UIView Rotation

+0

Спасибо за вашу помощь, но это действительно для приложения mac osx, т.е. «NSButton» не «UIButton» – hishboy

+0

Atleast read Question once перед ответом. – Mrug

0

Ваш код работает для меня до тех пор, как я установил reloadButton.wantsLayer = YES;


От Enabling Core Animation Support in Your App

В IOS приложений, Core Animation всегда включен, и каждый вид поддерживается слоем. В OS X приложения должны явно включить поддержку Core Animation, выполнив следующие действия:

  • Ссылка на каркас QuartzCore. (IOS приложение должно связать с этой структурой, только если они используют Core Animation интерфейсы явно.)
  • Включить поддержку слоя для одного или нескольких ваших NSView объектов
0

Попробуйте

CABasicAnimation *rotation; 
    rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    rotation.fromValue = [NSNumber numberWithFloat:0]; 
    rotation.toValue = [NSNumber numberWithFloat:(M_PI)]; 
    rotation.duration = 0.2; // Speed 
    rotation.repeatCount = 1; // Repeat forever. Can be a finite number. 
    [yourButton.layer addAnimation:rotation forKey:@"Spin"]; 
    [yourButton.layer setZPosition:100]; 
    yourButton.transform = CGAffineTransformMakeRotation(M_PI_2); 

Вы может изменить/установить продолжительность, repeatCount и toValue для вашего удобства.