Иметь несколько движущихся представлений UIImage с различными прикосновениями - PullRequest
0 голосов
/ 21 сентября 2011

Я работаю над тем, чтобы заставить несколько UIImageView перемещаться, когда они перетаскиваются. Я изначально ставил все движение под TouchesBegan. Однако когда я перетаскиваю один объект, все они исчезают, и перемещается только тот, который я перетаскиваю.

Как можно перетащить каждое изображение со своими собственными терминами (я перетаскиваю первое изображение, только первое изображение перемещается и т. Д.)?

Ответы [ 3 ]

1 голос
/ 25 сентября 2011

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

Просто убедитесь, что вы настроили 7 UIImageViews в файле XIB, свяжите их, и все будет в порядке.

@synthesize img1, img2, img3, img4, img5, img6, magnet;

-(void) checkInsertion {
    if (CGRectContainsRect(img2.frame, img1.frame)) {img1.center = img2.center;}
    if (CGRectContainsRect(img4.frame, img3.frame)) {img3.center = img4.center;}
    if (CGRectContainsRect(img6.frame, img5.frame)) {img5.center = img6.center;}

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.2];
    if (CGRectIntersectsRect(magnet.frame, img1.frame)) {img1.center = magnet.center;}
    if (CGRectIntersectsRect(magnet.frame, img2.frame)) {img2.center = magnet.center;}
    if (CGRectIntersectsRect(magnet.frame, img3.frame)) {img3.center = magnet.center;}
    if (CGRectIntersectsRect(magnet.frame, img4.frame)) {img4.center = magnet.center;}
    if (CGRectIntersectsRect(magnet.frame, img5.frame)) {img5.center = magnet.center;}
    if (CGRectIntersectsRect(magnet.frame, img6.frame)) {img6.center = magnet.center;}
    [UIView commitAnimations];

}

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch * touch = [[event allTouches] anyObject];
    CGPoint touchLoc = [touch locationInView:touch.view];

    if (CGRectContainsPoint(img1.frame, touchLoc)) {img1.center = touchLoc;}
    if (CGRectContainsPoint(img3.frame, touchLoc)) {img3.center = touchLoc;}
    if (CGRectContainsPoint(img5.frame, touchLoc)) {img5.center = touchLoc;}

    if (CGRectContainsPoint(magnet.frame, touchLoc)) {magnet.center = touchLoc;}

    [self checkInsertion];
}

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [self touchesBegan:touches withEvent:event];
}
0 голосов
/ 25 сентября 2011

Я получил его на работу!

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

    UITouch *touch = [[event touchesForView:self.view] anyObject];
    CGPoint location = [touch locationInView:touch.view];

    if(CGRectContainsPoint(plusone.frame, location))
    {
        UITouch *touch = [[event allTouches] anyObject];
        CGPoint location = [touch locationInView:touch.view];
        plusone.center = location;
    }
    if(CGRectContainsPoint(plustwo.frame, location))
    {
        UITouch *touch = [[event allTouches] anyObject];
        CGPoint location = [touch locationInView:touch.view];
        plustwo.center = location;
    }
    if(CGRectContainsPoint(plusthree.frame, location))
    {
        UITouch *touch = [[event allTouches] anyObject];
        CGPoint location = [touch locationInView:touch.view];
        plusthree.center = location;
    }
    if(CGRectContainsPoint(minusone.frame, location))
    {
        UITouch *touch = [[event allTouches] anyObject];
        CGPoint location = [touch locationInView:touch.view];
        minusone.center = location;
    }
    if(CGRectContainsPoint(minustwo.frame, location))
    {
        UITouch *touch = [[event allTouches] anyObject];
        CGPoint location = [touch locationInView:touch.view];
        minustwo.center = location;
    }
    if(CGRectContainsPoint(minusthree.frame, location))
    {
        UITouch *touch = [[event allTouches] anyObject];
        CGPoint location = [touch locationInView:touch.view];
        minusthree.center = location;
    }

Но, когда изображение сталкивается с другим, оно исчезает! У кого-нибудь есть решение этой проблемы?

0 голосов
/ 21 сентября 2011

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

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

Смотрите видео сессий WWDC за 2010 и 2011 годы о UIScrollView. Особенно с 2011 года. Они приводят примеры того, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...