内阴影的动画位置

时间:2013-07-09 03:39:14

标签: ios objective-c core-animation core-graphics

我想在使用PaintCode创建的bezier上设置内部阴影的位置。阴影的偏移量将是动画的,这里有两个例子:

Moving inner shadow

如何使这个动画属性成为可动画,以便为阴影的运动设置动画?生成的代码(粘贴到drawRect中)如下所示:

//// General Declarations
CGContextRef context = UIGraphicsGetCurrentContext();

//// Color Declarations
UIColor* fillColor = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 1];
UIColor* strokeColor = [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 0.508];

//// Shadow Declarations
UIColor* shadow = strokeColor;
CGSize shadowOffset = CGSizeMake(3.1, 3.1);
CGFloat shadowBlurRadius = 5;

//// Oval Drawing
UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(31.5, 33.5, 26, 26)];
[fillColor setFill];
[ovalPath fill];

////// Oval Inner Shadow
CGRect ovalBorderRect = CGRectInset([ovalPath bounds], -shadowBlurRadius, -shadowBlurRadius);
ovalBorderRect = CGRectOffset(ovalBorderRect, -shadowOffset.width, -shadowOffset.height);
ovalBorderRect = CGRectInset(CGRectUnion(ovalBorderRect, [ovalPath bounds]), -1, -1);

UIBezierPath* ovalNegativePath = [UIBezierPath bezierPathWithRect: ovalBorderRect];
[ovalNegativePath appendPath: ovalPath];
ovalNegativePath.usesEvenOddFillRule = YES;

CGContextSaveGState(context);
{
    CGFloat xOffset = shadowOffset.width + round(ovalBorderRect.size.width);
    CGFloat yOffset = shadowOffset.height;
    CGContextSetShadowWithColor(context,
        CGSizeMake(xOffset + copysign(0.1, xOffset), yOffset + copysign(0.1, yOffset)),
        shadowBlurRadius,
        shadow.CGColor);

    [ovalPath addClip];
    CGAffineTransform transform = CGAffineTransformMakeTranslation(-round(ovalBorderRect.size.width), 0);
    [ovalNegativePath applyTransform: transform];
    [[UIColor grayColor] setFill];
    [ovalNegativePath fill];
}
CGContextRestoreGState(context);

[strokeColor setStroke];
ovalPath.lineWidth = 1;
[ovalPath stroke];

0 个答案:

没有答案