1

我有一个 UIViewController 类,它包含 2 个自定义 UIView 类,它们是:

项目视图

绘图视图

在 UIViewController ViewDidLoad 方法中,我有以下代码:

- (void)viewDidLoad
{

    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    item = [[ItemView alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/2, 230, 230)];
    item.opaque = NO;

    [self.view addSubview:item];

    drawing = [[DrawingView alloc] initWithFrame:self.view.frame];
    [self.view insertSubview:drawing aboveSubview:item];
    [item release];
    [drawing release];

}

DrawingView 类获取 UITouches 并相应地在屏幕上绘制。

我的问题是:

除了在 ItemView 类对象的顶部之外,我可以在整个屏幕上绘制。DrawingView 类无法绘制到 ItemView。

让我用另一个词来解释它:

除 itemView 子视图区域外,DrawView 类在屏幕上工作。在 itemView 之上,DrawView 不能进行任何绘制,但除了 itemView 区域之外,它可以进行绘制。

我能做些什么?可能是什么问题?如何在所有屏幕上进行绘图,包括 ViewController 类上 addSubview 添加的 itemView 区域?

编辑:我正在添加一个屏幕截图以便更好地解释问题

在此图像链接中,您可以看到,我可以在白色区域上绘制,但不能在由 ItemView 类加载的图像的面上绘制。

编辑2:我发现问题与不透明度有关。在 ItemView 类中,我将添加的 UIImageView 对象 alpha 值更改为 0.5f。结果是半透明视图,现在我的手指画是可见的。然而,这不是我想要的。我想在视图的顶部绘图。我不想玩 alpha 值。

4

1 回答 1

0

最后,我自己找到了答案。这不是我想要的,但我的解决方案基于 CALayer。

我没有使用像 ItemView 这样的自定义 UIView 类,而是在 ItemView 类中添加了以下类方法:

+(CALayer *)imgLayer
{
    UIImage *img = [UIImage imageNamed:@"face.png"];
    CALayer *layer = [CALayer layer];
    CGFloat nativeWidth = CGImageGetWidth(img.CGImage);
    CGFloat nativeHeight = CGImageGetHeight(img.CGImage);
    CGRect startFrame = CGRectMake(0, 0, nativeWidth, nativeHeight);
    layer.contents = (id)img.CGImage;
    layer.frame = startFrame;
    return layer;

}

在我的 UIVIewController 类中,我调用了我的静态函数,如下所示:

    CAGradientLayer *bgLayer =  [GradientView greyGradient];
    bgLayer.frame = self.view.bounds;
    [self.view.layer insertSublayer:bgLayer atIndex:0];

    CALayer *imgLayer =[ItemView imgLayer];
    imgLayer.frame = self.view.bounds;
    [self.view.layer insertSublayer:imgLayer above:bgLayer];

它有效!现在我可以在我的图像上画画了。

于 2012-05-03T11:49:33.283 回答