2013-07-16 13 views
11

Przepraszam, jeśli wydaje się to bardzo niejasne, ale nie jestem pewien, jak inaczej to wyrazić.Dodawanie składnika "przeciągnij i upuść" do aplikacji iOS

Próbuję zbudować aplikację na iPada, która pozwoli użytkownikom zapełnić obszar roboczy narzędziami, których potrzebują. Potrzebuję przykładu pozwalającego użytkownikowi przeciągać i upuszczać komponenty do interfejsu aplikacji. Tak więc na przykład, gdybym miał aplikację, którą użytkownik może utworzyć i chciałbym, żeby użytkownik mógł przeciągać pola tekstowe, listy, przyciski radiowe itd., Aby utworzyć formularz, w jaki sposób chciałbym to zrobić? Elementy, których używam będą w wyskakującym menu, więc użytkownik przeciągnie, a następnie zobaczy wszystkie elementy, które potrzebuję w tym wyskakującym okienku. Im po prostu nie wiesz, jak pozwolić im przeciągnąć z popup do płótna, a także być w stanie ponownie użyć tego samego elementu (tak mają 3 lub 4 pola tekstowe w przykładzie). czy to możliwe? Czy każdy może skierować mnie do samouczka na ten temat? Szukałem, ale nie mogę znaleźć niczego.

Jeśli jest to niezgodne z prawdą lub jest głupim zadaniem, proszę dać mi znać, jak to zrobić, to jest mój pierwszy wpis tutaj.

Dziękujemy

+0

udało Ci się to osiągnąć. Czy możesz dzielić się kodem źródłowym, jeśli go posiadasz. Z góry dziękuję. – lazyCoder

Odpowiedz

8

Istnieje już wiele odpowiedzi wyjaśniających to pytanie. Zasadniczo możesz zrobić własny UIView, który po dotknięciu będzie podążał za ruchem dotyku. coś takiego:

-(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) {}]; 

} 

Podobne pytania

iPhone App: implementation of Drag and drop images in UIView

Basic Drag and Drop in iOS

iPhone drag/drop

0

enter image description here

Od pytanie, rzeczą, którą zamierzamy zbudować funkcję jak Dodaj do koszyka W większości handlowych, takich jak Amazon, odwracanie kart i etc .. Apps

- (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)]; 


    // } 
} 

można użyć tych kodów wdrożyć te feauture. Za pomocą tych kodów możesz przeciągnąć obiekt w dowolne miejsce na ekranie.

dla przykładowego projektu można użyć linku this.

Powiązane problemy