Перемещение UIImageView с помощью UIButton

Я новичок в разработке Xcode и iOS, но до сих пор получаю удовольствие от этой задачи.

Я столкнулся с проблемой, когда я пытаюсь переместить UIImageView, который я создал программно, поверх MapBox mapView.

Я хотел бы переместить этот UIImageView с UIButton на количество пикселей, при этом UIButton находится поверх mapView.

Это код, который у меня есть в моем ViewController.m:

    [self.view addSubview:mapView];

    UIImageView* ship;

    ship=[[UIImageView alloc] initWithFrame:CGRectMake(150, 200, 40, 40)];
    UIImage * image;
    image=[UIImage imageNamed:@"spaceShip"];
    [ship setImage:image];
    ship.alpha = 0.75;
    [self.view addSubview:ship];

    UIButton *upButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    upButton.frame = CGRectMake(150, 250, 40, 40);
    upButton.userInteractionEnabled = YES;

    [upButton setTitle:@"UP" forState:UIControlStateNormal];

    [upButton addTarget:ship action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:upButton];

}

- (IBAction)moveUp {
    ship.center = CGPointMake(ship.center.x, ship.center.y -10);
}

Может ли кто-нибудь показать мне, как заставить этот upButton распознавать и перемещать мой UIImageView?


person Morgan Jones    schedule 28.01.2015    source источник


Ответы (1)


Одна проблема заключается в том, что корабль — это локальная переменная, которую вы создаете в первом блоке кода. Когда этот блок кода выходит за рамки, корабль будет равен нулю, поэтому, когда вы попытаетесь установить его центр в методе кнопки, это не сработает. Вам нужно создать свойство для корабля и использовать его вместо этого.

Другая ваша проблема заключается в том, что когда вы добавляете действие к своей кнопке, вы называете его buttonPressed:, но метод, который вы реализовали, — это moveUp. Итак, если вы создаете свойство с именем ship, то ваш метод действия должен быть таким:

- (void)buttonPressed:(UIButton *) sender {
    self.ship.center = CGPointMake(self.ship.center.x, self.ship.center.y -10);
}
person rdelmar    schedule 28.01.2015
comment
@MorganJones, если этот ответ решил вашу проблему, вы должны принять его. - person rdelmar; 05.02.2015