从UIView类到另一个UIView类的手指画

时间:2012-04-30 21:25:17

标签: ios uitouch

我有一个UIViewController类,它包含两个自定义的UIView类:

ItemView控件

DrawingView

在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区域?

编辑:我正在添加截图以更好地解释问题

in this image link you can see that, I can draw on the white area but I cannot draw on the face which is an image loaded by ItemView class.

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

1 个答案:

答案 0 :(得分: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];

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