2012-04-30 94 views
1

我有一个UIViewController类,其保持时间为2自定义的UIView类:手指画从一个UIView类到另一个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。

让我在另一个词解释:

的drawView函数类的工作在屏幕上除了ItemView控件子视图的区域。在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值。

+2

'[self.view sendSubviewToBack:self.view];' 这似乎只是非有用... – Macmade

+0

我一直在尝试不同的变化,为了找到解决方案,但有或没有该行,它是不工作 –

+0

我不明白;你是否试图让DrawingView响应ItemView上方的触摸,因为它不是(从这里可以看到,没有理由说DrawingView不会响应,所以它可能会在代码的另一部分出现问题)或者是DrawingView正确响应,你只是想让它无法绘制在ItemView之上?还是有一些完全的其他目标,你正试图完成? –

回答

0

最后,我发现自己的答案。这不完全是我想要的,但我的解决方案基于CALayer。

而不是使用自定义的UIView类像ItemView控件的我加入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]; 

而且有用!现在我可以在我的图像上绘制图画。