Из вопроса следует, что вы хотите, чтобы пользователь мог касаться экрана в любом месте и рисовать изображение там, где они касаются? В отличие от постукивания в указанном месте и появления там изображения?
Если это так, то вам, вероятно, придется перейти к пользовательскому виду. В этом случае вы бы сделали что-то вроде следующего:
- Создать подкласс
UIView
.
- Переопределить метод
touchesBegan
. Вызовите [[touches anyObject] locationInView:self]
(где touches
- первый аргумент метода, NSSet
из UITouch
объектов), чтобы определить местоположение касания и записать его.
- Переопределить метод
touchesEnded
. Определите точки касания, заканчивающиеся при использовании того же метода, что и в шаге 2.
- Если второе местоположение находится рядом с первым, вам нужно разместить свое изображение в этом месте. Запишите это местоположение и вызовите
[self setNeedsDisplay]
, чтобы вызвать перерисовку пользовательского представления.
- Переопределить метод
drawRect
. Здесь, если местоположение было установлено на шаге 4, вы можете использовать метод UIImage
drawAtPoint
, чтобы нарисовать ваше изображение в выбранном месте.
Для получения более подробной информации, эта ссылка может стоить посмотреть . Надеюсь, это поможет!
РЕДАКТИРОВАТЬ: Я заметил, что вы задавали по существу тот же вопрос раньше. Если вы недовольны ответами, приведенными там, обычно считается, что лучше «поднять» старый, возможно, отредактировав его, чтобы попросить дальнейших разъяснений, а не создать новый вопрос.
РЕДАКТИРОВАТЬ: В соответствии с просьбой, следует очень краткий пример кода. Вероятно, это не самый лучший код, и я не проверял его, поэтому он может быть немного сомнительным. Просто для пояснения, THRESHOLD
позволяет пользователю слегка двигать пальцем при постукивании (до 3 пикселей), потому что очень сложно постукивать, не слегка двигая пальцем.
MyView.h
#define THRESHOLD 3*3
@interface MyView : UIView
{
CGPoint touchPoint;
CGPoint drawPoint;
UIImage theImage;
}
@end
* MyView.m 1047 ** * 1048
@implementation MyView
- (id) initWithFrame:(CGRect) newFrame
{
if (self = [super initWithFrame:newFrame])
{
touchPoint = CGPointZero;
drawPoint = CGPointMake(-1, -1);
theImage = [[UIImage imageNamed:@"myImage.png"] retain];
}
return self;
}
- (void) dealloc
{
[theImage release];
[super dealloc];
}
- (void) drawRect:(CGRect) rect
{
if (drawPoint.x > -1 && drawPoint.y > -1)
[theImage drawAtPoint:drawPoint];
}
- (void) touchesBegan:(NSSet*) touches withEvent:(UIEvent*) event
{
touchPoint = [[touches anyObject] locationInView:self];
}
- (void) touchesEnded:(NSSet*) touches withEvent:(UIEvent*) event
{
CGPoint point = [[touches anyObject] locationInView:self];
CGFloat dx = point.x - touchPoint.x, dy = point.y - touchPoint.y;
if (dx + dy < THRESHOLD)
{
drawPoint = point;
[self setNeedsDisplay];
}
}
@end