Перетащите без удаления UIButton - PullRequest
2 голосов
/ 07 сентября 2011

Я внедряю систему перетаскивания в приложении для iphone. До сих пор мне удалось реализовать перетаскиваемую кнопку, и она работает нормально. Вот код, который у меня есть:

Сначала я назначаю действие кнопке:

[button addTarget:self action:@selector(imageMoved:withEvent:) forControlEvents:UIControlEventTouchDragInside];

Затем я создаю перетаскивание:

- (IBAction) imageMoved:(id) sender withEvent:(UIEvent *) event
{
    NSLog(@"moved");
    CGPoint point = [[[event allTouches] anyObject] locationInView:self.view];
    UIControl *control = sender;
    control.center = point;
}

Однако я хочу добиться, чтобы перетаскиваемая кнопка не удалялась оттуда, где она есть. Поэтому я подумал об одном решении - создать новую кнопку, аналогичную первой, и переместить эту вновь созданную кнопку. Но у меня возникли проблемы в реализации этой последней части. Любая помощь? Большое спасибо!

Ответы [ 2 ]

1 голос
/ 07 сентября 2011
- (IBAction) imageMoved:(id) sender withEvent:(UIEvent *) event {
    NSLog(@"moved");          

    CGPoint point = [[[event allTouches] anyObject] locationInView:self.view];

    if (![self.view viewWithTag:11]) {

        NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:(UIButton*)sender];                

        UIButton *anotherButton =(UIButton*) [NSKeyedUnarchiver unarchiveObjectWithData:archivedData];

        anotherButton.tag = 11;    


        UIImage *senderImage=[(UIButton *)sender imageForState:UIControlStateNormal];




        CGImageRef cgImage = [senderImage CGImage];


        UIImage *copyOfImage = [[UIImage alloc] initWithCGImage:cgImage];



        [anotherButton setImage:copyOfImage forState:UIControlStateNormal];

        [self.view addSubview:anotherButton];
    }

    [self.view viewWithTag:11].center = point;
}
0 голосов
/ 03 января 2014

Чтобы снять ограничение, вы можете добавить два события на кнопку источника, например:

[button addTarget:self action:@selector(imageMoved:withEvent:) forControlEvents:UIControlEventTouchDragInside];
[button addTarget:self action:@selector(imageMoved:withEvent:) forControlEvents:UIControlEventTouchDragOutside];

Таким образом, событие также сработает, когда вы выйдете за пределы текущего представления (вашей кнопки), и вы сможете перемещать новую кнопку по всему супервизору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...