2

我创建了一个名为 myBezierPaths 的类,有两个类型为 UIBezierPath 和 UIColor 的成员变量,然后我尝试使用此类的对象来绘制 bezierpath,但我没有得到 bezierpath,下面是我的代码

//Bezierpath.h

@interface BezierPath : NSObject
{
UIBezierPath *m_bezierPath;
UIColor *m_pathColor;
}

@property (nonatomic, strong) UIBezierPath *bezierPath;
@property (nonatomic, strong) UIColor *pathColor;
@end


//drawingView.m


- (void)drawRect:(CGRect)rect
{ 
for (BezierPath *pathobj in m_pathArray) 
{ 
[pathobj.pathColor setStroke];
[pathobj.pathColor setFill];
[pathobj.bezierPath strokeWithBlendMode:kCGBlendModeNormal alpha:1.0]; 
} 
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
*self.myPath = [[BezierPath alloc] init];*

myPath.bezierPath.lineWidth = 5; 
myPath.bezierPath.lineCapStyle = kCGLineCapRound;
myPath.bezierPath.flatness = 0.0;
myPath.bezierPath.lineJoinStyle = kCGLineJoinRound;
myPath.bezierPath.miterLimit = 200.0;

self.myPath.pathColor = [UIColor redColor];

UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; 

[myPath.bezierPath moveToPoint:[mytouch locationInView:self]];
[m_pathArray addObject:self.myPath];
}



- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
    [self.myPath.bezierpath addLineToPoint:[mytouch locationInView:self]];    

    [self setNeedsDisplay];    
}

希望我的解释清楚,等待回复

问候兰吉特

4

3 回答 3

2

首先,在你的drawRect你实际上并没有填充形状。您确实对其进行了描边(基本上是画了一个边框),但是您需要调用[pathObj.bezierPath fill];以实际用颜色填充形状。

您没有显示很多代码,因此很难判断问题出在哪里。我会在drawRect方法中创建一个断点来确定是否所有变量都在那里。例如,您显示(我假设)是一个数组:m_pathArray。你确定它已经初始化了吗?您确定 的属性BezierPath工作正常吗?我注意到touchesBegan你设置pathColor但只能访问/读取bezierPath变量。那已经初始化了吗?您在哪里创建“m_bezierPath”实例变量?您是在 BezierPathinit方法中创建它还是在访问时懒惰地实例化它?

所以这些是你可以检查的几件事。

于 2012-06-22T12:11:04.757 回答
0

@Ranjit 需要一些帮助我有同样的问题......我想改变 UIbezierpath 的颜色。但是当我选择颜色时,我以前的路径也会自动用新颜色着色。

在我的第一张图片中,我画了一条线,选择的颜色是红色。但是当我选择黄色来绘制另一条线时,前一行也变为黄色。(图 2)

在此处输入图像描述

在此处输入图像描述

于 2012-07-03T07:47:56.763 回答
0

你没有显示你的touchesMoved事件处理程序,但我希望这样的事情。否则,您所做的只是创建一组长度为零的路径。

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; 

[self.myPath.bezeirPath lineToPoint:[mytouch locationInView:self]];


}
于 2012-06-22T11:45:31.973 回答