1

私はこのコードをで使用して、内部にタッチドラッグIBActionでを作成しUIImageViewています: UIButton

-(IBAction) addNewPhoto:(id)sender{

switch ([sender tag]) {
    case 0:{

        imageMove = [UIImage imageNamed:@"knet.jpg"];

         holderView = [[UIView alloc] initWithFrame:CGRectMake(0,0, imageMove.size.width, imageMove.size.height)];
        UIImageView *imageview = [[UIImageView alloc] initWithFrame:[holderView frame]];
        [imageview setImage:imageMove];
        [holderView addSubview:imageview];

        UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
        [pinchRecognizer setDelegate:self];
        [holderView addGestureRecognizer:pinchRecognizer];

        UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
        [rotationRecognizer setDelegate:self];
        [holderView addGestureRecognizer:rotationRecognizer];

        UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
        [panRecognizer setMinimumNumberOfTouches:1];
        [panRecognizer setMaximumNumberOfTouches:1];
        [panRecognizer setDelegate:self];
        [holderView addGestureRecognizer:panRecognizer];

        UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
        [tapRecognizer setNumberOfTapsRequired:1];
        [tapRecognizer setDelegate:self];
        [holderView addGestureRecognizer:tapRecognizer];

        [self.view addSubview:holderView];

        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:.5];
        [superView setFrame:CGRectMake(0, 0, 320, 550)];
        //[holderView setFrame:CGRectMake(0, 0, 320, 550)];
        //holderView.alpha = 1;
        [UIView commitAnimations];

    }
        break;
    case 1:
    {
        imageMove = [UIImage imageNamed:@"test.jpg"];

        //..........similar to case 0 but another picture
         }
        break;

    default:
        break;
}

ボタンは内側にありますscrollView。私が探しているのは、ユーザーがボタンから指をドラッグしたところに画像を作成し、指を離さなくてもボタンを動かせるようにする必要があるということです。

このブログの画像を移動、ズーム、回転するためのソースコードを使用しましたが、UIImagePickerControllerではなくボタンを使用して画像を作成するように変更しました。

4

2 に答える 2

1

そのためにa を使用できますUILongPressGestureRecognizerUILongPressGestureRecognizerをメイン ビュー (holderView のスーパー ビュー) に追加するUILongPressGestureRecognizerと、呼び出されたセレクターで の状態を検出して、何をすべきかを判断できます。ジェスチャが認識された後に指を動かすと、は次のUILongPressGestureRecognizer状態になります。UIGestureRecognizerStateChanged

- (void)createNewImage:(UILongPressGestureRecognizer *)gestureRecognizer
{
    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
        // create a new image, add to the view, and position at the location of the touch
        // store a reference to it in an ivar
    } else if (([gestureRecognizer state] == UIGestureRecognizerStateChanged)) {
        // move the image stored in the ivar
    } else {
        // set the ivar to nil
        // add the standard gesture recognisers to the new image
    }
}

さらに説明するには、View Controller に新しい変数を追加します。

@interface ViewController
{
    UIView *_newView;
}
@end

viewDidLoad次に、これをビュー コントローラーのメソッドに追加します。

UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(createNewImage:)];
[self.view addGestureRecognizer:longPressGesture];

createNewImage次に、View Controllerにメソッドを追加します。

- (void)createNewImage:(UILongPressGestureRecognizer *)gestureRecognizer
{
    CGPoint translation = [gestureRecognizer locationInView:self.view];

    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) { //press has begun    
        UIImage *image = [UIImage imageNamed:@"knet.jpg"];
        UIView *holderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
        UIImageView *imageview = [[UIImageView alloc] initWithFrame:[holderView frame]];
        [imageview setImage:image];
        [holderView addSubview:imageview];

        [holderView setCenter:CGPointMake(translation.x, translation.y)];
        _newView = holderView;

        [self.view addSubview:holderView];
    } else if (([gestureRecognizer state] == UIGestureRecognizerStateChanged)) { //finger is moving

        [_newView setCenter:CGPointMake(translation.x, translation.y)];

    } else { //finger lifted off to end the long press

        // here, you'll have to add all the other gesture recognisers to 
        // _newView in case if the new image is moved
        _newView = nil;
    }
}

補足: ビューの階層を維持しましたが、冗長なようです。ホルダー ビューなしでholderViewドラッグするだけです。UIImageView

それが役立つことを願っています

于 2013-01-07T09:18:35.647 に答える
0

RayWenderlichのこの記事を使用することをお勧めします。それはあなたが望むすべてを提供し、ドラッグします、これはあなたが明らかに探しているものです、それは指で画像をドラッグするための解決策を提供し、それにクールな速度効果を追加することさえできます!ピンチしてズーム、タッチ、回転します。そこからサンプルコードをダウンロードできます。これにより、ジェスチャレコグナイザーを把握することができました。

ローハン

于 2013-01-07T09:16:59.033 に答える