drawRect 和 setNeedsDisplay 永远不会被调用

发布于 2024-11-17 13:23:41 字数 2329 浏览 5 评论 0原文

为其分配手势

我添加了一个 uiview (带有 uimageview 的holderview)作为子视图,并使用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];

panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[holderView addGestureRecognizer:panRecognizer];
holderView.tag=101;
[self.view addSubview:holderView];
[holderView sizeToFit];
[self AddInformation];
[holderView retain];
[self retain];

然后在 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(@"在矩形中输入绘图");

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];永远不要致电或解雇任何有关该问题的建议或帮助

I added a uiview (holderview that carry uimageview ) as subview and asign gesture to it using

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];

panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[holderView addGestureRecognizer:panRecognizer];
holderView.tag=101;
[self.view addSubview:holderView];
[holderView sizeToFit];
[self AddInformation];
[holderView retain];
[self retain];

then in panRecognizer function (move) I want to draw line using

         UIPanGestureRecognizer *gR = (UIPanGestureRecognizer *) sender ; 


        NSValue *value = [NSValue valueWithCGPoint: [gR locationInView:gR.view]]; 





        [Points addObject:value];


        [holderView setNeedsDisplay];

        NSLog(@"End of measuring") ; 

and I will use the points in Points to draw line above all the subviews in

-(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];







}

}

the problem is [holderView setNeedsDisplay]; never call or fire drawRect any suggestion or help regarding that

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凉薄对峙 2024-11-24 13:23:41

您需要子类化UIView并在子类中实现drawRect。

然后,在创建holderview时,请确保实例化您的子类UIView,而不是默认的UIView。

You need to subclass UIView and implement drawRect in the subclass.

Then when creating holderview, make sure you're instantiating your subclassed UIView and not the default UIView.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文