iphone :: touchesMoved: переместить UIImageView внутрь UIView? - PullRequest
0 голосов
/ 18 июля 2011

Это мой код:

- (void) touchesBegan: (NSSet *)touches withEvent: (UIEvent *)event {

CGPoint pt = [[touches anyObject] locationInView:self.view];
startLocation = pt;
[super touchesBegan: touches withEvent: event];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint pt = [[touches anyObject] locationInView:self.view];
CGRect frame = [self.view frame];
frame.origin.x += pt.x - startLocation.x;
frame.origin.y += pt.y - startLocation.y;
[self.view setFrame:frame];
}


- (void)viewDidLoad
{
[super viewDidLoad];

UIView *v = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 100, 100)];
v.backgroundColor = [UIColor redColor];


UIImageView *imv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"boo2.png"]];
imv.frame = CGRectMake(0, 0, 50, 50);
[v addSubview:imv];

[self.view addSubview: v];
[v release];

UIView *v2 = [[UIView alloc] initWithFrame: CGRectMake(100, 100, 100, 100)];
v2.backgroundColor = [UIColor blueColor];


UIImageView *imv2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"boo2.png"]];
imv2.frame = CGRectMake(0, 0, 50, 50);
[v2 addSubview:imv2];

[self.view addSubview: v2];
[v2 release];
}

Я хочу переместить UIImageView внутри UIView, а не весь вид. Но код выше, когда я пытаюсь перетащить, он перемещает весь вид.

ПРИМЕЧАНИЕ. Изображения возвращаются из других функций, а не объявляются в viewdidload. Предположим, вы не можете объявлять переменные UIImageView.

1 Ответ

1 голос
/ 18 июля 2011

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

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

Если это так, я бы посоветовал вам хранить каждый из UIImageView's в массиве. Затем, в touchesBegan:withEvent:, вам нужно будет определить, к какому UIImageView обращаются. Хорошее начало - получить CGPoint, представляющий местоположение на главном экране, как вы делаете в своем коде. Если вы добавили UIImageView's непосредственно в качестве дополнительных видов основного вида, вы можете сравнить координаты этого CGPoint с кадрами этих UIImageView's, чтобы определить, какой из них нажимается.

Затем, чтобы разрешить перетаскивание, необходимо сохранить координаты UIImageView в начале касания. Затем, каждый раз, когда касание перемещается, вы можете вычислить новую x-позицию UIImageView как исходную x-позицию, плюс пройденное расстояние. То есть

newImageViewX = imageViewStartX + (newTouchX - touchStartX);

и аналогично для y-позиции.

...