【问题标题】:Drawing UIBezierPath with different colors in iOS在 iOS 中用不同颜色绘制 UIBezierPath
【发布时间】:2012-06-21 10:00:23
【问题描述】:

我正在使用UIBezierPath 绘图,我想为我的路径选择不同的颜色,但发生的情况是所有路径都设置为当前选择的颜色,那么我该如何解决这个问题,下面是我的代码

(void)drawRect:(CGRect)rect
{
    if(changecolor)
    {
        AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
        strokeColor = appDelegate.color;

        SEL blackSel = NSSelectorFromString(strokeColor);
        UIColor* tColor = nil;
        if ([UIColor respondsToSelector: blackSel])
            tColor  = [UIColor performSelector:blackSel];
        [tColor setStroke];
        [tColor setFill];

        **for (UIBezierPath *_path in pathArray)      
           [_path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];**              
    }
    else
    {    
        [[UIColor redColor] setStroke];
        [[UIColor redColor] setFill];

        *for (UIBezierPath *_path in pathArray)         
            [_path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];*
    }
}

这里我的 bezierpaths 存储在一个数组中,所以请告诉我应该如何进行

问候 兰吉特

【问题讨论】:

  • 您在这个主题上学到了这么多,真是太棒了。伟人:)
  • 嗨 aalok 给我你的 emailid
  • 好的,谢谢,我会尽快回复您

标签: iphone ios cocoa-touch core-graphics uibezierpath


【解决方案1】:

尝试在不同的CAShapeLayers 上使用适当的 StartingPointEndingPoint 绘制不同颜色的 UIBezierPaths,并将这些 ShapeLayers 添加到主 ShapeLayer 中,例如 self.mainShapeLayer 和然后将其添加到您的视图的layer

例如: 在初始化并将mainShapeLayer 添加到您的viewlayer 之后,用不同的颜色从-drawRect 调用此方法

//In drawRect
self.shapeLayer_main = [CAShapeLayer layer];
[self.layer addSubLayer:self.mainShapeLayer];


-(void)drawPathHavingStartPoint:(CGPoint )startPoint andEndPoint:(CGPoint )endPoint withColor:(UIColor *)color
{
 CAShapeLayer* shapeLayer = [CAShapeLayer layer];
 //Add lineWidth, strokeColor, fillColor, path (with the points) and then add it to the mainShapeLayer
 [self.mainShapeLayer addSublayer:shapeLayer];
 }

希望这能解决您的问题。

【讨论】:

    【解决方案2】:

    在循环内设置颜色:

        for (UIBezierPath *path in pathArray) {
           [myColor setStroke]
           [path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
         }         
    

    关于命名约定,仅使用_作为实例变量,而不用于本地。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多