Создание изображений ... Как? - PullRequest
1 голос
/ 04 июня 2010

Может, кто-нибудь подскажет, как сделать так, чтобы изображение появлялось, когда пользователь нажимает на экран, и отображает его в месте касания.Заранее спасибо, Тейт

Ответы [ 3 ]

2 голосов
/ 04 июня 2010

UIView является подклассом UIResponder, который может помочь следующим методам: -touchesBegan:withEvent:, -touchesEnded:withEvent:, -touchesCancelled:withEvent: и -touchesMoved:withEvent:.

Первый параметр каждого из них - это NSSet из UITouch объектов. UITouch имеет метод экземпляра -locationInView:, который должен определять положение крана на вашем виде.

1 голос
/ 07 июля 2010

Вы можете создать начальную звезду и просто перемещать ее при каждом касании вида. Я не уверен, каков будет ваш конечный результат.

Примечание: Этот код даст вам 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;
    }
}
0 голосов
/ 04 июня 2010

Из вопроса следует, что вы хотите, чтобы пользователь мог касаться экрана в любом месте и рисовать изображение там, где они касаются? В отличие от постукивания в указанном месте и появления там изображения?

Если это так, то вам, вероятно, придется перейти к пользовательскому виду. В этом случае вы бы сделали что-то вроде следующего:

  1. Создать подкласс UIView.
  2. Переопределить метод touchesBegan. Вызовите [[touches anyObject] locationInView:self] (где touches - первый аргумент метода, NSSet из UITouch объектов), чтобы определить местоположение касания и записать его.
  3. Переопределить метод touchesEnded. Определите точки касания, заканчивающиеся при использовании того же метода, что и в шаге 2.
  4. Если второе местоположение находится рядом с первым, вам нужно разместить свое изображение в этом месте. Запишите это местоположение и вызовите [self setNeedsDisplay], чтобы вызвать перерисовку пользовательского представления.
  5. Переопределить метод 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

...