tiene saber pencil cuanta conectar como carga bateria apple iphone core-animation

iphone - saber - como conectar apple pencil



iPhone Core Animation-Dibujando un cĂ­rculo (4)

Aquí hay otra solución al problema, basada en la respuesta de @David. Este enfoque le permite establecer la dirección de la animación del círculo y ofrece un poco más de control. Editar: escribí una publicación de blog sobre cómo dibujar un círculo con Swift , que trataré de mantener al día con las versiones beta. Compruebe si el código siguiente no funciona para usted.

let radius = 100.0 // Create the circle layer var circle = CAShapeLayer() // Set the center of the circle to be the center of the view let center = CGPointMake(CGRectGetMidX(self.frame) - radius, CGRectGetMidY(self.frame) - radius) let fractionOfCircle = 3.0 / 4.0 let twoPi = 2.0 * Double(M_PI) // The starting angle is given by the fraction of the circle that the point is at, divided by 2 * Pi and less // We subtract M_PI_2 to rotate the circle 90 degrees to make it more intuitive (i.e. like a clock face with zero at the top, 1/4 at RHS, 1/2 at bottom, etc.) let startAngle = Double(fractionOfCircle) / Double(twoPi) - Double(M_PI_2) let endAngle = 0.0 - Double(M_PI_2) let clockwise: Bool = true // `clockwise` tells the circle whether to animate in a clockwise or anti clockwise direction circle.path = UIBezierPath(arcCenter: center, radius: radius, startAngle: CGFloat(startAngle), endAngle: CGFloat(endAngle), clockwise: clockwise).CGPath // Configure the circle circle.fillColor = UIColor.blackColor().CGColor circle.strokeColor = UIColor.redColor().CGColor circle.lineWidth = 5 // When it gets to the end of its animation, leave it at 0% stroke filled circle.strokeEnd = 0.0 // Add the circle to the parent layer self.layer.addSublayer(circle) // Configure the animation var drawAnimation = CABasicAnimation(keyPath: "strokeEnd") drawAnimation.repeatCount = 1.0 // Animate from the full stroke being drawn to none of the stroke being drawn drawAnimation.fromValue = NSNumber(double: fractionOfCircle) drawAnimation.toValue = NSNumber(float: 0.0) drawAnimation.duration = 30.0 drawAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) // Add the animation to the circle circle.addAnimation(drawAnimation, forKey: "drawCircleAnimation")

Deseo crear una animación La mejor manera en que puedo explicar esto es si puedes imaginar dibujando un círculo. Comienza en la parte superior o las 12 en punto y gira en el sentido de las agujas del reloj hasta que se convierte en un círculo completo en el espacio de 10 o más segundos.

El armario al que he llegado es el de dibujar un punto girando alrededor de un punto central usando Core Animation (usando el código de ejemplo here ). Pero no sé cómo dibujar el círculo. Cualquier sugerencia es bienvenida.

Muchas gracias :)


Lo que realmente debe hacer es animar el trazo de una Lengua de Caracteres CAS donde la ruta es un círculo. Esto se acelerará usando Core Animation y es menos complicado que dibujar parte de un círculo en -drawRect :.

El siguiente código creará una capa de forma circular en el centro de la pantalla y animará el trazo en sentido horario para que parezca que se está dibujando. Por supuesto, puede usar cualquier forma que desee. (Puede leer este artículo en el blog de Ole Begemanns para obtener más información sobre cómo animar el trazo de una capa de forma).

Nota: las propiedades de stoke no son las mismas que las propiedades de borde en la capa. Para cambiar el ancho del trazo, debe usar "lineWidth" en lugar de "borderWitdh", etc.

// Set up the shape of the circle int radius = 100; CAShapeLayer *circle = [CAShapeLayer layer]; // Make a circular shape circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0*radius, 2.0*radius) cornerRadius:radius].CGPath; // Center the shape in self.view circle.position = CGPointMake(CGRectGetMidX(self.view.frame)-radius, CGRectGetMidY(self.view.frame)-radius); // Configure the apperence of the circle circle.fillColor = [UIColor clearColor].CGColor; circle.strokeColor = [UIColor blackColor].CGColor; circle.lineWidth = 5; // Add to parent layer [self.view.layer addSublayer:circle]; // Configure animation CABasicAnimation *drawAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; drawAnimation.duration = 10.0; // "animate over 10 seconds or so.." drawAnimation.repeatCount = 1.0; // Animate only once.. // Animate from no part of the stroke being drawn to the entire stroke being drawn drawAnimation.fromValue = [NSNumber numberWithFloat:0.0f]; drawAnimation.toValue = [NSNumber numberWithFloat:1.0f]; // Experiment with timing to get the appearence to look the way you want drawAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; // Add the animation to the circle [circle addAnimation:drawAnimation forKey:@"drawCircleAnimation"];


Ok, tengo una solución parcial. Encontré el siguiente código que dibuja segmentos de un círculo. Es básicamente una subclase UIView que obtiene su drawRect disparado cada vez que se debe actualizar su progreso. La única pregunta que tengo ahora es ¿cómo la cambiaría para que, en lugar de dibujar secciones o cortes, dibujara el trazo del círculo?

-(void)drawRect:(CGRect)rect { // Drawing code CGRect allRect = self.bounds; CGRect circleRect = CGRectInset(allRect, 2.0f, 2.0f); CGContextRef context = UIGraphicsGetCurrentContext(); // Draw background CGContextSetRGBStrokeColor(context, self.strokeValueRed, self.strokeValueGreen, self.strokeValueBlue, self.strokeValueAlpha); // white CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 0.1f); // translucent white CGContextSetLineWidth(context, self.lineWidth); CGContextFillEllipseInRect(context, circleRect); CGContextStrokeEllipseInRect(context, circleRect); // Draw progress CGPoint center = CGPointMake(allRect.size.width / 2, allRect.size.height / 2); CGFloat radius = (allRect.size.width - 4) / 2; CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees CGFloat endAngle = (self.progress * 2 * (float)M_PI) + startAngle; CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f); // white CGContextMoveToPoint(context, center.x, center.y); CGContextAddArc(context, center.x, center.y, radius, startAngle, endAngle, 0); CGContextClosePath(context); CGContextFillPath(context); }


Tengo una solución a este problema, código a continuación. Parece que me he equivocado en mi explicación del problema en cuestión, así que lo reescribí como otra pregunta que fue respondida con la solución correcta, mira here

¡Gracias a todos por su consejo!

-(void)drawRect:(CGRect)rect { // Drawing code CGRect allRect = self.bounds; CGContextRef context = UIGraphicsGetCurrentContext(); // Draw background CGContextSetRGBStrokeColor(context, self.strokeValueRed, self.strokeValueGreen, self.strokeValueBlue, self.strokeValueAlpha); // white CGContextSetLineWidth(context, 5); // Draw progress CGPoint center = CGPointMake(allRect.size.width / 2, allRect.size.height / 2); CGFloat radius = (allRect.size.width - 4) / 2; CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees CGFloat endAngle = (self.progress * 2 * (float)M_PI) + startAngle; CGContextAddArc(context, center.x, center.y, radius, startAngle, endAngle, 0); CGContextStrokePath(context); }