Добавление компонента перетаскивания в приложение iOS

Я прошу прощения, если это кажется очень расплывчатым, но я не уверен, как еще это словом.

Я пытаюсь создать приложение ipad, которое позволит пользователям заполнять рабочую область необходимыми инструментами. Мне нужен пример, позволяющий пользователю перетаскивать компоненты в интерфейс приложения. Так, например, если у меня было приложение, которое пользователь может сделать в форме, и я хочу, чтобы пользователь мог перетаскивать текстовые поля, списки, радиокнопки и т.д., Чтобы сделать форму, как бы я это сделал? Элементы, которые я использую, будут отображаться во всплывающем меню, чтобы пользователь перетягивал вверх, а затем увидит все элементы, которые мне нужны внутри этого всплывающего окна. Я просто не уверен, как позволить им перетащить из всплывающего окна на холст, а также сможет повторно использовать один и тот же элемент (так что в примере есть 3 или 4 текстовых поля). Это возможно? Может ли кто-нибудь направить меня к учебнику по этому вопросу? Я искал, но не мог найти ничего.

Если это изложено неправильно или это глупый квест, пожалуйста, дайте мне знать, как это сделать, это моя первая публикация здесь.

Спасибо

Ответ 1

Уже есть много ответов, объясняющих этот вопрос. В основном вы можете сделать пользовательский UIView, который после касания будет следить за движением касания. Что-то вроде этого:

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

}

Похожие вопросы

iPhone App: реализация перетаскивания изображений в UIView

Основное перетаскивание в iOS

перетаскивание iPhone

Ответ 2

введите описание изображения здесь

Из вопроса я вы собираетесь построить такую ​​функцию, как "Добавить в корзину" в большинстве приложений для магазинов, таких как Amazon, Flip kart и т.д.

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


   // }
}

вы можете использовать эти коды для реализации этих функций. Используя этот код, вы можете перетащить объект в любом месте на экране.

для примера проекта вы можете использовать эту ссылку.