Может кто-нибудь, пожалуйста, скажите мне, как сделать так, чтобы изображение появлялось, когда пользователь касается экрана, и чтобы оно появлялось в месте касания. Заранее спасибо, Тейт
Создание изображений Как?
Ответы (3)
UIView
является подклассом UIResponder
, в котором есть следующие методы, которые могут помочь: -touchesBegan:withEvent:
, -touchesEnded:withEvent:
, -touchesCancelled:withEvent:
и -touchesMoved:withEvent:
.
Первый параметр каждого из них — это NSSet
из UITouch
объектов. UITouch
имеет -locationInView:
метод экземпляра, который должен выдавать положение касания в вашем представлении.
Вы можете создать начальную звезду и просто перемещать ее каждый раз, когда вы касаетесь вида. Я не уверен, как будет выглядеть конечный результат.
Примечание. Этот код даст вам 1 звезду, которая перемещается одним нажатием. Вот мой код: -
(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];
switch ([allTouches count]) {
case 1:
{
UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
CGPoint point = [touch locationInView:myView];
myStar.center = point;
break;
}
default:
break;
}
}
Из вопроса следует, что вы хотите, чтобы пользователь мог нажимать в любом месте экрана и отображать изображение там, где он нажимает? В отличие от нажатия в указанном месте и появления изображения там?
Если это так, вам, вероятно, придется использовать настраиваемый вид. В этом случае вы должны сделать что-то вроде следующего:
- Создайте подкласс
UIView
. - Переопределите метод
touchesBegan
. Вызовите[[touches anyObject] locationInView:self]
(гдеtouches
— первый аргумент метода,NSSet
изUITouch
объектов), чтобы получить местоположение касания, и запишите его. - Переопределите метод
touchesEnded
. Определите место, где касания закончились, используя тот же метод, что и в шаге 2. - Если второе место находится рядом с первым, вам нужно разместить свое изображение в этом месте. Запишите это местоположение и вызовите
[self setNeedsDisplay]
, чтобы перерисовать пользовательский вид. - Переопределите метод
drawRect
. Здесь, если местоположение было установлено на шаге 4, вы можете использоватьUIImage
методdrawAtPoint
для рисования изображения в выбранном месте.
Для получения дополнительной информации может быть полезна эта ссылка. взгляд. Надеюсь, это поможет!
РЕДАКТИРОВАТЬ: я заметил, что вы уже задавали тот же вопрос раньше. Если вас не устраивают приведенные там ответы, обычно считается, что лучше «поднять» старый, возможно, отредактировав его, чтобы запросить дополнительные разъяснения, а не создавать новый вопрос.
EDIT: В соответствии с запросом следует очень краткий пример кода. Это, вероятно, не лучший код, и я не тестировал его, поэтому он может быть немного сомнительным. Просто для пояснения: THRESHOLD
позволяет пользователю немного двигать пальцем при нажатии (до 3 пикселей), потому что очень сложно нажать, не двигая пальцем.
MyView.h
#define THRESHOLD 3*3
@interface MyView : UIView
{
CGPoint touchPoint;
CGPoint drawPoint;
UIImage theImage;
}
@end
MyView.m
@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