Создание изображений Как?

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


person tallen11    schedule 03.06.2010    source источник
comment
Пожалуйста, не задавайте вопросы повторно. Вы можете отредактировать уже существующий, что поднимет его на вершину активного квеста и, возможно, привлечет больше внимания, и (как только вы наберете некоторое количество репутации) вы можете предложить награду. Я собираюсь отметить это для модераторов как кандидата на слияние, но на будущее не делайте этого!   -  person dmckee --- ex-moderator kitten    schedule 30.09.2010
comment
Да, пожалуйста, не публикуйте дубликаты. Я объединил два ваших вопроса вместе. Вы всегда можете редактировать свои собственные сообщения, независимо от того, какая у вас репутация. Вы также можете оставлять комментарии к своим вопросам и ответы на свои вопросы, поэтому, пожалуйста, используйте комментарии вместо ответов, где это уместно. Дополнительную информацию см. в разделе Часто задаваемые вопросы.   -  person Bill the Lizard    schedule 30.09.2010


Ответы (3)


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

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

person Thomas Müller    schedule 03.06.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;
    }
}
person joemama8933    schedule 06.07.2010

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

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

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