所以我对objective-c有一点经验,但不是很多。我正在尝试通过TouchEvents渲染UIBezierPath(换句话说,用手指画一条线)。另外,我想将所有bezierPaths保存到NSMutableArray(路径)中,以便我以后可以移动或修改它们。这是最简单的应用程序。我的标题如下所示:
@interface ViewController : UIViewController{
UIBezierPath* path;
NSMutableArray* paths;
int curThickness;
}
@property (strong, nonatomic) IBOutlet UIView *scene;
@end
场景是占据整个屏幕的视图,也是我试图绘制路径的地方。
Relavent实现如下所示:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
NSLog(@"Starting Path");
path = [UIBezierPath bezierPath];
path.lineWidth = 15.0f;
path.lineCapStyle = kCGLineCapRound;
path.lineJoinStyle = kCGLineJoinRound;
path.flatness = 2.0;
path.miterLimit = 4.0;
[path moveToPoint:[touch locationInView:scene]];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
[path addLineToPoint:[touch locationInView:scene]];
[scene setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
NSLog(@"I'm supposed to be drawing something...");
[[UIColor redColor] set];
[path stroke];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"No more touchy feelies");
UITouch *touch = [touches anyObject];
[path addLineToPoint:[touch locationInView:scene]];
[paths addObject:path];
[scene setNeedsDisplay];
NSLog(@"number of paths: %i.", paths.count);
}
当我在模拟器上运行它时,所有事件都被注册,从不调用DrawRect,屏幕上没有任何内容(即使我在touchesEnded末尾添加了[path trace]),path is nonEmpty,并且无论我追踪多少条路径,paths.count都保持为零。
我错过了什么?一如既往,您的帮助总是非常受欢迎。
答案 0 :(得分:1)
应该帮助你的事情:
UIViewController
未实现- (void)drawRect
..您需要在UIView
子类中执行此代码!
如果您的paths
集合始终为零,则导致此问题的常见错误是paths
本身为零。 (Obj-c并不关心你是否尝试向nil对象发送消息,它只会返回一个默认值而不是崩溃。)仔细检查你是否实例化了一个NSMutableArray
对象并指向{{1}对它来说。