【问题标题】:drawing lines on top of UIImageView which has an image already在已经有图像的 UIImageView 上绘制线条
【发布时间】:2011-09-24 14:45:22
【问题描述】:

我有一张用 UIImageView 显示的 png 格式的黑白图片。它是一个没有把手的时钟形状。所以背景是白色的 - 圆圈是黑色的。 然后我想在把手上画几个小时和几分钟,虽然我不远但我无法让它工作......

当我绘制手柄时,我最终得到了一个黑色的大方块(所以我无法透过它看到它后面的 png),并且至少我看到了我的 2 个手柄(我想要的蓝色)。我想我们的目标是让那个黑色的大方块变成白色/透明的,所以它应该可以工作......

我的代码如下:

- (void)drawRect:(CGRect)rect 
{
......

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect);
CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
CGContextSetRGBStrokeColor(context, 0.0, 0.0, 1.0, 1.0);    
[self drawLineForContext:context Width:10.0 angle:hAlpha length:self.frame.size.width/2.0 - 40];
[self drawLineForContext:context Width:5.0 angle:mAlpha length:self.frame.size.width/2.0 - 12];
}

你认为我缺少什么?

有关信息,设置图像,我只是这样做,我想它是正确的,因为它工作......

UIImage *image = [UIImage imageNamed: [md objectForKey:Q_DIRECTION_PIC]];
[ivDirectionPic setImage: image];
ivDirectionPic.backgroundColor=[UIColor clearColor];
ivDirectionPic.contentMode = UIViewContentModeScaleAspectFit;

感谢您的帮助!

干杯, 啧啧

EDIT1:我添加了 UIColor clearColor,但它仍然是一样的......我不明白你对如何添加另一个具有相同框架的子类的评论:请问如何?在哪里?

我还添加了您要求我发布的额外功能:

- (void) drawLineForContext:(const CGContextRef)context Width:(float)_width angle:(double)_angle length:(double)radius
{
CGPoint c = CGPointMake(self.frame.size.width/2.0, self.frame.size.height/2.0);

CGContextSetLineWidth(context, _width);
CGContextMoveToPoint(context, self.center.x, self.center.y);
CGPoint addLines[] =
{
    CGPointMake(self.frame.size.width/2.0, self.frame.size.height/2.0),
    CGPointMake(radius*cos(_angle) +c.x, radius*sin(_angle) +c.y),
};

CGContextAddLines(context, addLines, sizeof(addLines)/sizeof(addLines[0]));
CGContextStrokePath(context);
}

【问题讨论】:

    标签: iphone uiimageview line draw cgcontext


    【解决方案1】:

    您的UIImageView 需要将其backgroundColor 设置为[UIColor clearColor]

    如果这不起作用,只需在图像视图顶部添加具有相同框架的 UIView 的另一个子类。

    另一个错误来源可能是您的 drawLineForContext 方法,您没有为其发布任何代码。

    【讨论】:

    • 感谢 Mundi。我添加了 clearcolor 但没有更改黑色大框架 - 你会看到它现在在代码中。正如我上面写的,我不明白你的第二句话。我如何添加这个子类,请问在哪里?我还添加了额外的代码。提前感谢您的帮助
    • 要覆盖“drawRect”,您需要“子类化”。我的意思是在图像视图的顶部添加 another 视图并在其中进行绘图。这将帮助您隔离问题。
    • 我应该添加哪个视图?以及如何在上面?
    • 哪个?一个UIView。怎么上?将frame 设置为等于图像视图的框架。
    • 所以最后我玩了它 - 在顶部添加了额外的视图,但它没有做任何事情,直到我意识到我将类视图对象放在 IB 的图像视图中......然后设置alpha 系数为 0.5。 (所以我最后删除了顶视图)所以非常感谢,因为你肯定给我指出了正确的方向。我唯一剩下的,但我认为这已经足够好了,两张照片都是灰色的……我不能同时让两张照片都用黑色非常清晰。谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多