Реализовать перетаскивание в приложении для разделения iPad? - PullRequest
1 голос
/ 17 мая 2010

Я очень любезен в разработке для iPhone и iPad, поэтому любые советы будут с благодарностью приняты.

Я хочу создать приложение iPad с разделенным видом, в котором пользователи могут перетаскивать изображение из контроллера корневого представления и размещать его в подробном представлении.

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

Какие-нибудь указатели на лучший способ достичь этого? Большое спасибо!

1 Ответ

1 голос
/ 25 июля 2011

Ну, во-первых, если ваш новый, я предлагаю получить книгу. Мой Начало разработки iPhone 4
Дэйв Марк, Джек Наттинг и Джефф Ламарш (Апресс). Это спасло меня от тратить много времени и начать. Кроме того, могут быть более подходящие книги, подходящие для того, что вам нужно, но у этой книги есть довольно хорошая глава, посвященная касаниям, прикосновениям и жестам ... 15: Удары, касания и жесты.

В любом случае, вот суть:

const UIImageView * viewBeingDragged = nil;

// in your rootController 
// (lets say a UIViewController with one UIImageView)
//
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    CGPoint touchPoint = [[touches anyObject] locationInView:self.view];

    //our image views are direct decendents of our main view
    //the following method returns the farthest decendent from the target 
    //in the point, so make sure you dont have any intersecting subviews!
    //pretty sure you dont need event
    //
    UIView *v = [self.view hitTest:touchPoint event:nil];
    NSAssert([v isMemberOfClass:[UIImageView class]], @"Not an image view?!?!?"]);

    viewBeingDragged = (UIImageView *)v;

    [v removeFromSuperview]; 
    // or just gray it out...
    [self.view.superview.superview addSubview:v]; 
    //should be your splitViewController, if not get from AppDelegate
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
    viewBeingDragged.center = 
        [[touches anyObject] locationInView:SplitControllerView];

    if (viewBeingDragged.frame intersects with detailViewController.view.frame)
    {
        //visual cue that landing zone is set
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    // last check if view still intersects
    // if so move underlieing data from left to right
    // redraw left view
    // remove viewBeingDragged from superview
    // add viewBeingDragged to 
    viewBeingDragged = nil;
}

Вы также можете реализовать касания Отменено
Я не проверял этот метод, поэтому могут возникнуть неожиданные вещи.
Кроме того, UIView имеет те же сенсорные методы, поэтому, если вы хотите создать свой собственный настраиваемый контроллер представлений / представлений, чтобы сделать его более ... "расширяемым".

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