0

私のスクロールビューでは、ユーザーがLONGPRESSをタップしたときに各イメージビューを移動できる、複数のイメージビューがあります。

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveImage:)];
[panGesture setMaximumNumberOfTouches:2];
[panGesture setDelegate:self];
[imageview addGestureRecognizer:panGesture];


UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] init];
[imageview addGestureRecognizer:longPressRecognizer];

- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

return YES;
}



- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizerv     {
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
    UIView *piece = gestureRecognizerv.view;
    CGPoint locationInView = [gestureRecognizerv locationInView:piece];
    CGPoint locationInSuperview = [gestureRecognizerv locationInView:piece.superview];

    piece.layer.anchorPoint = CGPointMake(locationInView.x / piece.bounds.size.width, locationInView.y / piece.bounds.size.height);
    piece.center = locationInSuperview;
}
}


- (void)moveImage:(UIPanGestureRecognizer *)gestureRecognizerg
{
NSLog(@"sdfgdsgsdg");
UIView *piece = [gestureRecognizerg view];
[self adjustAnchorPointForGestureRecognizer:gestureRecognizerg];

// need to test if the scrollview is already using the touches. If it is, leave them
if (!galleryView.tracking) {
    if ([gestureRecognizerg state] == UIGestureRecognizerStateBegan || [gestureRecognizerg state] == UIGestureRecognizerStateChanged) {
        CGPoint translation = [gestureRecognizerg translationInView:[piece superview]];

        [piece setCenter:CGPointMake([piece center].x + translation.x, [piece center].y + translation.y)];
        [gestureRecognizerg setTranslation:CGPointZero inView:[piece superview]];
    }
}
}

ここでの私の問題は、THE IMAGEVIEWがscollviewのどこにでも移動していることです。つまり、ギャラリービューのようにビューを再配置する必要があります。

4

1 に答える 1

1

その再配置動作を取得するには、グリッドを設定して要素をグリッドに「スナップ」したり、必要に応じて要素を邪魔にならないように移動したりするロジックが必要になります。これはかなり複雑です。現在のコードは、ジェスチャーでビューを移動するだけです。

ただし、iOS 6以降をターゲットにできる場合は、ほぼ確実にUICollectionView代わりに使用することをお勧めします。これにより、多くの機能が無料で提供されます。コレクションビューは、再配置の背後にあるレイアウトとロジックを簡素化し、一般的にあなたの生活をはるかに楽にします。

于 2012-11-03T09:34:52.840 に答える