Ajouter un composant glisser-déposer à l'application iOS

Je m'excuse si cela semble très vague mais je ne sais pas comment le dire autrement.

J'essaie de créer une application ipad qui permettra aux users de remplir un espace de travail avec les outils dont ils ont besoin. J'ai besoin d'un exemple de laisser un user glisser et déposer des composants dans l'interface de l'application. Ainsi, par exemple, si j'avais une application dans laquelle l'user peut créer un formulaire et que je souhaite que l'user puisse faire glisser des zones de text, des lists, des buttons radio, etc. pour faire le formulaire, comment procéder? Les éléments que j'utilise seront dans un menu contextuel afin que l'user fasse glisser puis verra tous les éléments dont j'ai besoin dans ce popup. Je ne suis pas sûr de savoir comment les laisser glisser de la window contextuelle à la canvas et aussi être en mesure de réutiliser le même élément (donc avoir 3 ou 4 zones de text dans l'exemple). Est-ce possible? Quelqu'un peut-il me diriger vers un tutoriel à ce sujet? J'ai cherché mais ne peux rien find.

Si cela est mal posé ou si c'est une quête stupide, faites-le moi savoir comment faire, c'est la première fois que je postrai ici.

Je vous remercie

Il y a déjà beaucoup de réponses expliquant cette question. Fondamentalement, vous pouvez faire UIView personnalisé, qui après avoir touché suivra le mouvement tactile. Quelque chose comme ça:

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { _originalPosition = self.view.center; _touchOffset = CGPointMake(self.view.center.x-position.x,self.view.center.y-position.y); } -(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint position = [touch locationInView: self.view.superview]; [UIView animateWithDuration:.001 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^ { self.view.center = CGPointMake(position.x+_touchOffset.x, position.y+_touchOffset.y); } completion:^(BOOL finished) {}]; } -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { CGPoint positionInView = [touch locationInView:self.view]; CGPoint newPosition; if (CGRectContainsPoint(_desiredView.frame, positionInView)) { newPosition = positionInView; // _desiredView is view where the user can drag the view } else { newPosition = _originalPosition; // its outside the desired view so lets move the view back to start position } [UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^ { self.view.center = newPosition // to } completion:^(BOOL finished) {}]; } 

Des questions similaires

Application iPhone: implémentation de glisser-déposer des images dans UIView

Drag et Drop de base dans iOS

glisser / déposer de l'iPhone

entrez la description de l'image ici

De la Question i chose que vous allez build une fonctionnalité comme Ajouter au panier dans la plupart des applications Shopping comme Amazon, Flip kart et etc.

 - (void)viewDidLoad { [super viewDidLoad]; shoeImageView1 = [[UIImageView alloc]initWithFrame:CGRectMake(46,222, 51 , 51)]; shoeImageView1.image = [UIImage imageNamed:@"shoe.png"]; shoeImageView2 = [[UIImageView alloc]initWithFrame:CGRectMake(150,222, 51 , 51)]; shoeImageView2.image = [UIImage imageNamed:@"shoe1.png"]; shoeImageView3 = [[UIImageView alloc]initWithFrame:CGRectMake(225,222, 51 , 51)]; shoeImageView3.image = [UIImage imageNamed:@"shoe2.png"]; addTOCart = [[UIImageView alloc]initWithFrame:CGRectMake(132,400, 80, 80)]; addTOCart.image = [UIImage imageNamed:@"basket.png"]; [self.view addSubview:addTOCart]; imageViewArray = [[NSMutableArray alloc]initWithObjects: shoeImageView1,shoeImageView2 ,shoeImageView3,nil]; for (int i=0; i<imageViewArray.count; i++) { [self.view addSubview:[imageViewArray objectAtIndex:i]]; [[imageViewArray objectAtIndex:i]setUserInteractionEnabled:YES]; //[self touchesBegan:imageViewArray[i] withEvent:nil]; } } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { for(int i=0 ; i< imageViewArray.count; i++) { CGPoint pt = [[touches anyObject]locationInView:self.view]; startLocation = pt; newtemp = [imageViewArray objectAtIndex:i]; UITouch* bTouch = [touches anyObject]; if ([bTouch.view isEqual:newtemp]) { firstTouchPoint = [bTouch locationInView:[self view]]; oldX = firstTouchPoint.x - [[bTouch view]center].x; oldY = firstTouchPoint.y - [[bTouch view]center].y; } } } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { for(int i=0 ; i< imageViewArray.count; i++) { newtemp = [imageViewArray objectAtIndex:i]; //oldLoc = newtemp.frame; if (CGRectContainsPoint(addTOCart.frame , newtemp.frame.origin)) { NSLog(@"touched"); dragging = NO; UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Cart" message:@"Added to Cart" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [[imageViewArray objectAtIndex:i] setImage:[UIImage imageNamed:@""]]; [imageViewArray removeObjectAtIndex:i]; [alert show]; break; } else { //[newtemp setCenter:CGPointMake(startLocation.x-oldX, startLocation.y-oldY)]; } // self.view.userInteractionEnabled= NO; } dragging = NO; } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch* mTouch = [touches anyObject]; // if ([mTouch.view isEqual: newtemp]) { CGPoint cp = [mTouch locationInView:[self view]]; [[mTouch view]setCenter:CGPointMake(cp.x-oldX, cp.y-oldY)]; // } } 

Vous pouvez utiliser ces codes pour implémenter ces fonctionnalités. En utilisant ces codes, vous pouvez faire glisser l'object n'importe où sur l'écran.

Pour un exemple de projet, vous pouvez utiliser ce lien.