2012-02-16 2 views
3

私のコードでは、UIImageViewsにUIImagesを持つオブジェクトの配列があります。特定のUIImageViewをドラッグする

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)eventのforループを使用して、すべてのオブジェクトを1つずつ配列から移動します。

メインビューの異なる位置に移動すると、それらのオブジェクトのいずれかをつかんで別の場所に移動したいと考えています。

これを行うにはどうすればよいか分かりません。 touchesbeginを使用してクリックしたアイテムだけをドラッグできる方法はありますか?

基本的に5つのUIImageViewがあり、それぞれにUIImageがあり、どこかをクリックして移動することができるようになっています。

答えて

1

...あなたは、彼らがタップされたときに簡単に伝えることができますし、周りにそれらを移動するためにtouchesMovedを使用することができ、そのように移動させたいビューにジェスチャー認識機能を追加することを検討することをお勧めします私の大胆な見解でUIPanGestureRecognizerを使って大きな成功と似たようなことをしました。それをフックするために、それはこのようなものに見えるかもしれません:あなたのpan:方法で

@implementation DraggableView 

-(id)initWithFrame:(CGRect)frame 
{ 
    ... 
    ... 
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)] autorelease]; 
    [self addGestureRecognizer:panGesture]; 
    .. 
    return self; 
} 
@end 

を、あなたは、ジェスチャーの状態を確認しても、ジェスチャーの位置をキャプチャし、あなたのビューを再配置するためにそれを使用することができます。 UIPanGestureRecognizer

-(void)pan:(UIPanGestureRecognizer *)gesture 
{ 

    if (gesture.state==UIGestureRecognizerStateChanged) 
    { 
     //We're moving! 
     UIView *aRootView = <perhaps your root view controller's view>; 
     CGPoint currentOrigin = [gesture translationInView:aRootView]; 
     self.frame = CGRectMake(currentOrigin.x,currentOrigin.y,self.frame.size.width,self.frame.size.hight); 
     ... 
     ... 
    } 

} 

Here is more reading:ここではそれがどのように見えるかのラフ例です。

+0

ありがとうございます!それは私が必要としたものです –

0

あなたは私がしました

2

EDIT:John Muchowさんがブログhereに投稿しました。あなたは自分の目的に合わせて適応できるはずです。

//UIDraggableImageView.h 
#import <UIKit/UIKit.h> 

@interface UIDraggableImageView : UIImageView 
{ 
    CGPoint currentPoint; 
} 

@end 

//UIDraggableImageView.m 
#import "UIDraggableImageView.h" 

@implementation UIDraggableImageView 

- (id)initWithImage:(UIImage *)image 
{ 
    if (self = [super initWithImage:image]) { 
     self.userInteractionEnabled = YES; 
    } 
    return self; 
} 

-(void)dealloc { 
    [super dealloc]; 
} 

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event 
{ 
    // When a touch starts, get the current location in the view 
    currentPoint = [[touches anyObject] locationInView:self]; 
} 

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event 
{ 
    // Get active location upon move 
    CGPoint activePoint = [[touches anyObject] locationInView:self]; 

    // Determine new point based on where the touch is now located 
    CGPoint newPoint = CGPointMake(self.center.x + (activePoint.x - currentPoint.x), 
            self.center.y + (activePoint.y - currentPoint.y)); 

    //-------------------------------------------------------- 
    // Make sure we stay within the bounds of the parent view 
    //-------------------------------------------------------- 
    float midPointX = CGRectGetMidX(self.bounds); 
    // If too far right... 
    if (newPoint.x > self.superview.bounds.size.width - midPointX) 
     newPoint.x = self.superview.bounds.size.width - midPointX; 
    else if (newPoint.x < midPointX) // If too far left... 
     newPoint.x = midPointX; 

    float midPointY = CGRectGetMidY(self.bounds); 
    // If too far down... 
    if (newPoint.y > self.superview.bounds.size.height - midPointY) 
     newPoint.y = self.superview.bounds.size.height - midPointY; 
     else if (newPoint.y < midPointY) // If too far up... 
     newPoint.y = midPointY; 

    // Set new center location 
    self.center = newPoint; 
} 

@end 
-1

ボタンをクリックすると、カメラロールから画像ビューに画像を追加できます。画像はズームインとズームアウトが可能で、その画像をビューの任意の場所にドラッグする必要があります。

+0

あなたの答えをステップバイステップで作成してください。そしてあなたはすでにあなたの答えを試みたコードを役に立つ答えにすることができます –

関連する問題