UIBezierPath绘图问题

时间:2012-06-22 11:14:06

标签: ios cocoa-touch core-graphics uibezierpath

我创建了一个名为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];    
}

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

此致 兰吉特

3 个答案:

答案 0 :(得分:2)

首先,在你的drawRect中,你实际上并没有填充形状。你可以抚摸它(基本上画一个边框),但你需要调用[pathObj.bezierPath fill];来实际用颜色填充形状。

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

所以这些是你可以检查的东西。

答案 1 :(得分:0)

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

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

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

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


}

答案 2 :(得分:0)

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

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

enter image description here

enter image description here