尝试使用触摸事件在另一个图像上绘制图像

时间:2012-10-24 17:32:21

标签: iphone objective-c ios ipad

在我的应用程序中,我有一个名为mainvie的视图 - 当应用程序运行时,加载主视图,将背景图像加载到屏幕上(下面的代码),ring_large.jpg已添加为文件。

- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed:@"rink_large.jpg"];
CGPoint imagepoint = CGPointMake(10,0); 
[image drawAtPoint:imagepoint];
}

这很好用,当我试图在此基础上绘制另一个图像时,我遇到了问题。其他地方(名为mainviewcontroller.m的文件) - 触摸即使我试图获取触摸的位置,并在该位置绘制图像。下面列出的是我的代码。我不确定为什么我想放置的图像根本就没有绘制。我确信它不是在溜冰场图像后面,因为我评论了这一点,并且图像在点击时仍然没有绘制。这是触摸开始功能,应绘制图像。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     CGPoint location = [[touches anyObject] locationInView:mainView];
    UIImage *image = [UIImage imageNamed:@"small_cone.png"];
    [image drawAtPoint:location];
}

任何人都可以看到为什么在某个地方被触摸时图像不会被绘制? touchesBegan功能在任何地方触摸屏幕时开始,但图片不显示。谢谢你的帮助,我比较新的目标 - c。

1 个答案:

答案 0 :(得分:2)

UIImage drawAtPoint在当前图形上下文中绘制图像。您没有定义图形上下文。在drawRect(原始代码所在的位置)中,已经存在图形上下文。基本上,你是在告诉UIImage要绘制的位置,而不是在上绘制的内容。

你需要更像这样的东西:

CGPoint location = [[touches anyObject] locationInView:mainView];

UIGraphicsBeginImageContext(mainView.bounds.size);
UIImage *image = [UIImage imageNamed:@"small_cone.png"];
[image drawAtPoint:location];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

但是,这不会保留或考虑您的原始图像。如果您希望它们都被绘制,一个在另一个上,则对两个图像使用drawAtPoint:

CGPoint location = [[touches anyObject] locationInView:mainView];

UIGraphicsBeginImageContext(mainView.bounds.size);

UIImage *image = [UIImage imageNamed:@"rink_large.jpg"];
CGPoint imagepoint = CGPointMake(10,0);
[image drawAtPoint:imagepoint];

image = [UIImage imageNamed:@"small_cone.png"];
[image drawAtPoint:location];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

现在你可以用newImage做一些事情,它包含两个图像的合成。