iOS Animate Dashed Rectangle Border

前端 未结 1 1694
暖寄归人
暖寄归人 2020-12-31 13:29

I have a UIImageView displaying an image. I want to \"highlight\" a portion of the image by drawing a rounded rectangle outline. I would like to have the outline drawn with

相关标签:
1条回答
  • 2020-12-31 14:03

    Try Using CAShapeLayer with CGPath of your shape.

    Rounded rectangle path can be constructed using Uibezierpath convenience method.

    You can set a line pattern for the shape layer. Animating the line property of the shape layer would give the "marching ants like effect".

    shapeLayer = [CAShapeLayer layer];
    CGRect shapeRect = CGRectMake(0.0f, 0.0f, 200.0f, 100.0f);
    [shapeLayer setBounds:shapeRect];
    [shapeLayer setPosition:CGPointMake(160.0f, 140.0f)];
    [shapeLayer setFillColor:[[UIColor clearColor] CGColor]];
    [shapeLayer setStrokeColor:[[UIColor blackColor] CGColor]];
    [shapeLayer setLineWidth:1.0f];
    [shapeLayer setLineJoin:kCALineJoinRound];
    [shapeLayer setLineDashPattern:
     [NSArray arrayWithObjects:[NSNumber numberWithInt:10], 
      [NSNumber numberWithInt:5], 
      nil]];
      UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:shapeRect cornerRadius:15.0];
    [shapeLayer setPath:path.CGPath];
    [[imageview layer] addSublayer:shapeLayer];
    

    The animation function can be,

    - (void)toggleMarching
      {
    if ([shapeLayer animationForKey:@"linePhase"])
        [shapeLayer removeAnimationForKey:@"linePhase"];
    else {
        CABasicAnimation *dashAnimation;
        dashAnimation = [CABasicAnimation 
                         animationWithKeyPath:@"lineDashPhase"];
    
        [dashAnimation setFromValue:[NSNumber numberWithFloat:0.0f]];
        [dashAnimation setToValue:[NSNumber numberWithFloat:15.0f]];
        [dashAnimation setDuration:0.75f];
        [dashAnimation setRepeatCount:10000];
    
        [shapeLayer addAnimation:dashAnimation forKey:@"linePhase"];
    
    }
      }
    
    0 讨论(0)
提交回复
热议问题