簡體   English   中英

在數組中拖動多個UIImageViews

[英]Drag multiple UIImageViews in an Array

這就是我到目前為止

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

    UITouch *touch = [[event allTouches] anyObject];

    for (UIImageView *imageView in _imageViewArray) {
            CGPoint Location = [touch locationInView:touch.view];
            imageView.center = Location;
    }   
}

我面臨的問題是,當我移動一張圖像時,它們都會跳到同一位置。

多虧了cyberpawn,我才能做到這一點

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];

    CGPoint oldPoint = [touch previousLocationInView:touch.view];
    CGPoint newPoint = [touch locationInView:touch.view];

    CGPoint diff = CGPointMake(newPoint.x - oldPoint.x, newPoint.y - oldPoint.y);

    for (UIImageView *imageView in _imageViewArray) {
        if (CGRectContainsPoint(imageView.frame, newPoint)) {
            CGPoint cntr = [imageView center];
            [imageView setCenter:CGPointMake(cntr.x + diff.x, cntr.y + diff.y)];

        }
}
}

那是因為您要將它們全部移到同一位置,因此需要計算觸摸位置之間的差異並將該位移添加到所有視圖中。 下面的代碼應該可以解決您的問題! 忘記touchesBegan並僅重寫touchesMoved這樣的方法。

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];

    CGPoint oldPoint = [touch previousLocationInView:touch.view];
    CGPoint newPoint = [touch locationInView:touch.view];

    CGPoint diff = CGPointMake(newPoint.x - oldPoint.x, newPoint.y - oldPoint.y);

    for (UIImageView *imageView in _imageViewArray) {
        CGPoint cntr = [imageView center];
        [imageView setCenter:CGPointMake(cntr.x + diff.x, cntr.y + diff.y)];
    }
}

如果要單擊它們中的任何一個時分別移動它們,請改用下面的代碼!

float oldX, oldY;

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint pt = [touch locationInView:touch.view];
    for (UIImageView *imageView in _imageViewArray) {
        if(CGRectContainsPoint(imageView.frame, pt)) {
            oldX = imageView.center.x - imageView.frame.origin.x - pt.x;
            oldY = imageView.center.y - imageView.frame.origin.y - pt.y;
            break;
        }
    }
}

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

    for (UIImageView *imageView in _imageViewArray) {
        if (CGRectContainsPoint(imageView.frame, pt)) {
            [self setCenter:CGPointMake(pt.x+oldX, pt.y+oldY)];
        }
    }

享受編程!

在這里,您只能像這樣編碼。 如果要移動單個圖像,則必須找到該圖像,並且應該單獨移動該圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM