2

次のようにして、その周りにストロークで形状を描いています

- (void)drawRect:(CGRect)rect
{
    // Draw a cross rectagle
    CGContextRef    context     =   UIGraphicsGetCurrentContext();

    CGContextSaveGState(context);

    CGContextBeginPath(context);
    CGContextMoveToPoint    (context, 190, 0);
    CGContextAddLineToPoint (context, 220, 0);
    CGContextAddLineToPoint (context, 300, 80);
    CGContextAddLineToPoint (context, 300, 110);
    CGContextClosePath(context);

    CGContextSetFillColorWithColor(context, bgColor);                           // fill color
    CGContextSetStrokeColorWithColor(context, [UIColor grayColor].CGColor);     // set color for stroke
    CGContextSetLineWidth(context, .8);                                         // set width for stroke
    CGContextDrawPath(context,  kCGPathFillStroke);                             // do fill and stroke together


    CGContextEOClip(context);
    CGContextSetShadowWithColor(context, CGSizeMake(1, 1), 1.0, [UIColor whiteColor].CGColor);
    CGContextSetBlendMode (context, kCGBlendModeScreen);
    CGContextRestoreGState(context);
}

そして、私が以下のようになっているもの(クロスフラグ)

ここに画像の説明を入力

今回は十字旗の周りにも影を落としてみたいと思います。

これを達成するにはどうすればよいですか。この問題についてアドバイスをください。ありがとう。

4

2 に答える 2

4

CGContextSetShadowまたはCGContextSetShadowWithColorドキュメント1ドキュメント2

あなたの場合、私は経由して影を得ることができました

...
CGContextSaveGState(context);

CGContextSetShadowWithColor(context, CGSizeMake(-3 , 2), 4.0, [UIColor whiteColor].CGColor);

CGContextBeginPath(context);
CGContextMoveToPoint    (context, 190, 0);
...

そして、私はこれらを下から削除しました(クリップはここでは何もしていませんでした、なぜブレンドモードなのですか?)

CGContextEOClip(context);
CGContextSetShadowWithColor(context, CGSizeMake(1, 1), 1.0, [UIColor whiteColor].CGColor);
CGContextSetBlendMode (context, kCGBlendModeScreen);
于 2012-11-08T20:39:41.247 に答える
-1

UIBezierPath を使用してフラグをトレースし、パスにシャドウを適用することで、これを実現できるはずです。

これは、役に立つかもしれないサンプルコードのビットです

// create highlight
UIRectCorner corners = UIRectCornerTopLeft;
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0.0f, 0.0f, self.bounds.size.width, self.bounds.size.height + 50.0f) byRoundingCorners:corners cornerRadii:CGSizeMake(32.0f, 32.0f)];
[[self layer] setShadowPath:[shadowPath CGPath]];
[[self layer] setShadowOpacity:0.5f];
[[self layer] setShadowRadius:25.0f];
[[self layer] setShadowOffset:CGSizeMake(0.0f, 0.0f)];
[[self layer] setShadowColor:[[UIColor colorWithRed:1.0f green:1.0f blue:0.75f alpha:1.0f] CGColor]];
于 2012-11-08T20:35:11.367 に答える