【发布时间】:2011-06-22 08:27:00
【问题描述】:
我使用以下代码将视图添加为子视图
imageview = [[UIImageView alloc] initWithFrame:[holderView frame]];
[imageview setImage:cppobject->OutputImage];
imageview.contentMode = UIViewContentModeScaleAspectFit;
[holderView addSubview:imageview];
holderView.contentMode = UIViewContentModeScaleAspectFit ;
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
[pinchRecognizer setDelegate:self];
[holderView addGestureRecognizer:pinchRecognizer];
[pinchRecognizer release];
UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
[rotationRecognizer setDelegate:self];
[holderView addGestureRecognizer:rotationRecognizer];
[rotationRecognizer release];
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[holderView addGestureRecognizer:panRecognizer];
[panRecognizer release];
-(void)scale:(id)sender {
}
-(void)rotate:(id)sender {
}
-(void)move:(id)sender {
}
-(void)tapped:(id)sender {
}
当用户用他的两根手指平移和一个 uilabel(绿色的)时,我需要画线,如下图所示
我看过How to draw graphics in iphone gesture?
但我不能将它应用到子视图上,特别是 DrawInRect 方法
在 panRecognizer 函数中(移动)我想画线使用
UIPanGestureRecognizer *gR = (UIPanGestureRecognizer *) sender ;
NSValue *value = [NSValue valueWithCGPoint: [gR locationInView:gR.view]];
[Points addObject:value];
[holderView setNeedsDisplay];
NSLog(@"End of measuring") ;
我将使用Points中的点在所有子视图上方画线
-(void)drawRect:(CGRect)rect {
NSLog(@"Entered Draw In Rect");
if (Measuring) {
[[UIColor redColor] setStroke];
UIBezierPath *pathToDraw = [UIBezierPath bezierPath];
for (int n = 1; n < [Points count] - 1 ; n++) {
NSValue * value = [Points objectAtIndex:(NSInteger)n];
CGPoint point = [value CGPointValue];
[pathToDraw moveToPoint:point];
value = [Points objectAtIndex:(NSInteger)n+1];
point = [value CGPointValue];
[pathToDraw addLineToPoint:point];
}
[pathToDraw stroke];
}
}
问题是[holderView setNeedsDisplay];永远不要打电话或解雇 drawRect 任何关于此的建议或帮助
任何建议
【问题讨论】:
-
看起来您的 holderView 可能是 UIScrollView。如果是这样的话,这将更加困难。您能否也发布您的
drawRect:方法 - 当我们看不到相关代码时,很难提供帮助。 -
我试过 [imageView setNeedsDisplay];但它没有用
-
setNeedsDisplay只是告诉框架需要渲染视图。如果视图没有正确插入到层次结构中,drawRect将不会被调用 -
分离出在另一个视图上绘制的逻辑..!例如,使用具有类似于 imageView 的框架的透明 MeasurementView,添加 imageview 的子视图并在那里处理绘图逻辑。 @AMH
标签: iphone objective-c ipad subview