Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I would scrap the timer and do move it in <code>touchesMoved</code>.</p> <p>My solution lets you draw on a UIImageView canvas and has a white box follow your finger while you're drawing. Drop it into any UIView to try it out:</p> <pre><code>// These should probably be @properties static CGPoint lastPoint; static CGPoint currentPoint; static UIView *box; static UIImageView *canvas; - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; currentPoint = [touch locationInView:self]; lastPoint = [touch locationInView:self]; // Create the canvas the first time. Should probably do this elsewhere // but done here for paste-ability if (canvas == nil) { canvas = [[UIImageView alloc] initWithFrame:self.frame]; canvas.backgroundColor = [UIColor redColor]; [self addSubview:canvas]; } // Create the box that follows the finger. Should probably do this elsewhere // but done here for paste-ability if (box == nil) { box = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)]; box.backgroundColor = [UIColor whiteColor]; [self addSubview:box]; } // Ensure we can see it and move it right away box.alpha = 1.0f; box.center = CGPointMake(currentPoint.x, currentPoint.y - 50); } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; currentPoint = [touch locationInView:self]; // Set up everything for drawing UIGraphicsBeginImageContext(canvas.frame.size); CGContextRef context = UIGraphicsGetCurrentContext(); [canvas.image drawInRect:CGRectMake(0, 0, canvas.image.size.width, canvas.image.size.height)]; CGContextSetLineCap(context, kCGLineCapRound); CGContextSetLineWidth(context, 1); CGContextSetStrokeColorWithColor (context, [UIColor blueColor].CGColor); // Draw the path CGContextBeginPath(context); CGContextMoveToPoint(context, lastPoint.x, lastPoint.y); CGContextAddLineToPoint(context, currentPoint.x, currentPoint.y); CGContextStrokePath(context); canvas.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); // Animate the box very quickly to the new location [UIView animateWithDuration:0.1f delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ box.center = CGPointMake(box.center.x + (currentPoint.x - lastPoint.x), box.center.y + (currentPoint.y - lastPoint.y)); } completion:nil]; // Remember our last touch lastPoint = currentPoint; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { // Finish it off by fading out the box [UIView animateWithDuration:0.4f animations:^{ box.alpha = 0.0f; }]; } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload