2013-05-10 1 views
0

Я создаю приложение, в котором пользователи могут создавать свои собственные сцены с изображениями, присутствующими там. Я создал кнопки в качестве изображений, теперь мне нужен какой-то код, который позволяет пользователю перетаскивать изображения (кнопки) в область просмотра конкретного изображения.Пользователи должны иметь возможность перетаскивать изображения и размещать их на изображении в ios

+0

Я новичок в разработке, это мой первый проект. – user2368693

ответ

0

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

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

Если у вас NSArray из imageViews, вы можете добавить жест их надтаблицы:

@property (nonatomic, strong) NSMutableArray *imageViews; 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

[self createImageViewArray]; 

UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self                   action:@selector(handlePan:)]; 
[self.view addGestureRecognizer:gesture]; 
} 

- (void)createImageViewArray 
{ 
self.imageViews = [NSMutableArray array]; 
} 

- (void)handlePan:(UIPanGestureRecognizer *)gesture 
{ 
static UIImageView *draggedImage = nil; 
static CGRect draggedImageOriginalFrame; 

CGPoint location = [gesture locationInView:gesture.view]; 

if (gesture.state == UIGestureRecognizerStateBegan) 
{ 

    draggedImage = [self determineImageForLocation:location]; 

    if (draggedImage) 
    { 
     draggedImageOriginalFrame = draggedImage.frame; 
     [draggedImage.superview bringSubviewToFront:draggedImage]; 
    } 
} 
else if (gesture.state == UIGestureRecognizerStateChanged && draggedImage != nil) 
{ 

    CGPoint translation = [gesture translationInView:gesture.view]; 
    CGRect frame = draggedImageOriginalFrame; 
    frame.origin.x += translation.x; 
    frame.origin.y += translation.y; 
    draggedImage.frame = frame; 
} 
else if (draggedImage != nil && (gesture.state == UIGestureRecognizerStateEnded || 
           gesture.state == UIGestureRecognizerStateCancelled || 
           gesture.state == UIGestureRecognizerStateFailed)) 
{ 

    UIImageView *droppedOver = nil; 

    if (gesture.state == UIGestureRecognizerStateEnded) 
     droppedOver = [self draggedImageView:draggedImage toLocation:location]; 

    if (droppedOver == nil) 
    { 
     [UIView animateWithDuration:0.25 
         animations:^{ 
          draggedImage.frame = draggedImageOriginalFrame; 
         }]; 
    } 
    else 
    { 
     [droppedOver.superview bringSubviewToFront:droppedOver]; 

     [UIView animateWithDuration:0.25 
         animations:^{ 
          draggedImage.frame = droppedOver.frame; 
          droppedOver.frame = draggedImageOriginalFrame; 
         }]; 
    } 
    } 
} 

- (UIImageView *)draggedImageView:(UIImageView *)draggedView toLocation:(CGPoint)location 
{ 
    for (UIImageView *imageview in self.imageViews) 
    if (CGRectContainsPoint(imageview.frame, location) && imageview != draggedView) 
     return imageview; 

return nil; 
} 
- (UIImageView *)determineImageForLocation:(CGPoint)location 
{ 
return [self draggedImageView:nil toLocation:location]; 
} 
+0

дать ему преимущество – 2014-08-21 08:50:20

Смежные вопросы