titlelabel guidelines color buttons ios objective-c uibutton

ios - guidelines - UIButton giratorio



menu ios (4)

Bueno, los documentos dicen: "... las animaciones especificadas se inician inmediatamente en otro hilo ...". Ahora, todo el código UIKit NO es seguro para subprocesos. Por lo tanto, quizás resulte útil llamar a los setters de UI (setTransform, setCenter) desde el bloque de finalización (que se ejecuta en un hilo separado) para llamarlos utilizando performSelectorOnMainThread:withObject:

He intentado rotar un botón con el siguiente método:

-(IBAction)rotate:(id)sender{ CGPoint pencilCenter = pencil.center; [pencil setCenter:pencilCenter]; CGFloat floater = 1.0; [UIView animateWithDuration:0.7 animations:^(void){ [pencil setTransform:CGAffineTransformMakeRotation(floater)]; }]; [UIView animateWithDuration:0.7 animations:^(void){ [pencil setTransform:CGAffineTransformMakeRotation(floater)]; }]; }

Se supone que esto hace que el botón haga algún tipo de "sacudida", luego se supone que está de vuelta en su posición original, pero todo lo que hace es cambiar la ubicación del botón, moviéndolo a un solo lado y en otra ejecución del método. el botón no reacciona en absoluto .

¿Cuál es el problema con mi código?

¡Gracias!

EDIT 2: Mi pregunta es, ¿cómo hago un botón para hacer un pequeño movimiento / sacudida, por ejemplo, el modo de aplicación de meneo al editar Sptingboard.

Usar este código me está dando rotación hacia la izquierda, anima suavemente de izquierda a derecha y luego de derecha a izquierda, luego gira a la posición original. Ahora, quiero que esto no solo gire, sino que lo haga con una animación, como un meneo.

[UIView animateWithDuration:0.25 delay:0.0 options:(UIViewAnimationOptionAllowUserInteraction | UIViewAnimationCurveLinear | UIViewAnimationOptionAutoreverse) animations:^ { pencil.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(30)); pencil.transform = CGAffineTransformIdentity; } completion:^(BOOL finished){ } ];

¡Gracias!


Importe "QuartzCore / QuartzCore.h" y pruebe esto,

CABasicAnimation *fullRotation; fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; fullRotation.delegate = self; fullRotation.fromValue = [NSNumber numberWithFloat:0]; fullRotation.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)]; fullRotation.duration = 1.7; fullRotation.repeatCount = 2; [btnTemp.layer addAnimation:fullRotation forKey:@"360"];


Intente utilizar CGAffineTransformRotate lugar de CGAffineTransformMakeRotation . Puede usar `CGAffineTransformIdentity1 como el primer argumento en todas las llamadas, por lo que la transformación final de acuerdo con el segundo argumento se aplicará en la forma original (?) Del marco.


Si bien no respondió perfectamente la pregunta, la respuesta de Shardul es genial para girar el botón (2 rotaciones completas). Así que aquí está, convertido a Swift 3 :

let fullRotation = CABasicAnimation(keyPath: "transform.rotation") fullRotation.delegate = self fullRotation.fromValue = NSNumber(floatLiteral: 0) fullRotation.toValue = NSNumber(floatLiteral: Double(CGFloat.pi * 2)) fullRotation.duration = 0.5 fullRotation.repeatCount = 2 button.layer.add(fullRotation, forKey: "360")

Necesitarás importar QuartzCore:

import QuartzCore

Y su ViewController necesita ajustarse a CAAnimationDelegate:

class ViewController: UIViewController, CAAnimationDelegate { }