iPhone: как перетащить или переместить UIImage / UIButton, как показано ниже? - PullRequest
5 голосов
/ 05 декабря 2011

Я не знаю, как получить следующий тип функциональности в моем приложении.

enter image description here

Как показано на рисунке выше, пользователь может перемещать (перетаскивать) различные части изображения, а пользователь может собиратьобраз.

Может кто-нибудь сказать мне, что это за контроль?Или любой учебник для этого?

Ответы [ 7 ]

7 голосов
/ 05 декабря 2011

Ознакомьтесь с примером приложения MoveMe. Он покажет вам, как разрешить перемещение подпредставлений касанием и перетаскиванием.

Затем вы можете создать imageViews для каждой из ваших частей головоломки, которые можно перемещать.

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

http://developer.apple.com/library/ios/#samplecode/MoveMe/Introduction/Intro.html

1 голос
/ 05 декабря 2011

Для приложения, которое я создал, я использовал функции касаний:

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event 
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event 

для перетаскивания UIImageViews.Затем вы можете использовать CGRectContainsRect или CGRectContainsPoint, чтобы определить, находится ли кусок головоломки в нужном месте.

1 голос
/ 05 декабря 2011

Все зависит от того, какую реализацию вы хотите сделать.Это может быть UIImageView, UIbutton и т. Д. Преимущество UIIMageView может заключаться в том, что вы можете легко реализовать UIGestureRecognizer для перемещения представлений.

0 голосов
/ 13 августа 2016

Вот код, как переместить imgTest, который является UIImageView. Проверено, работает как шарм.

[[self imgTest]setUserInteractionEnabled:YES];

//Save the first touch point
CGPoint firstTouchPoint;

//xd,yd destance between imge center and my touch center
float xd;
float yd;

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch* bTouch = [touches anyObject];
    if ([bTouch.view isEqual:[self imgTest]]) {
        firstTouchPoint = [bTouch locationInView:[self view]];
        xd = firstTouchPoint.x - [[bTouch view]center].x;
        yd = firstTouchPoint.y - [[bTouch view]center].y;
    }
}

{
    UITouch* mTouch = [touches anyObject];
    if (mTouch.view == [self imgTest]) {
        CGPoint cp = [mTouch locationInView:[self view]];
        [[mTouch view]setCenter:CGPointMake(cp.x-xd, cp.y-yd)];
    }
}

источник

0 голосов
/ 05 декабря 2011

Моя первая атака на эту проблему будет выглядеть следующим образом:

(1) подкласс UIImageView для хранения каждого фрагмента головоломки.

(2) Настройте свой подкласс UIImageView, инициализировав егоUIPanGestureRecognizer.Что-то вроде:

self.panRecognizer = 
  [[UIPanGestureRecognizer alloc] 
    initWithTarget: self 
    action: @selector(handlePan:)];
[self addGestureRecognizer: 
  self.panRecognizer];

(3) В методе действия, связанном с распознавателем жестов панорамирования, обновите местоположение объекта на основе сообщений от распознавателя жестов панорамирования фрагмента головоломки.Должно работать что-то вроде следующего:

-(void) handlePan: 
  (UIGestureRecognizer *)sender
{
  UIPanGestureRecognizer *panRecognizer = 
    (UIPanGestureRecognizer *)sender;
  if (panRecognizer.state == 
        UIGestureRecognizerStateBegan ||
      panRecognizer.state == 
        UIGestureRecognizerStateChanged)
  {
    CGPoint currentPoint = 
      self.center;
    CGPoint translation = 
      [panRecognizer translationInView: 
        self.superView];
    self.center = CGPointMake
      (currentPoint.x + translation.x, 
        currentPoint.y + translation.y);
    [panRecognizer setTranslation: CGPointZero 
      inView: self.superView];
  }
} 
0 голосов
/ 05 декабря 2011

Это не так просто. Сначала вам нужно написать код для перемещения изображений. В ссылках Apple много примеров. Затем вам нужно получить границы каждого изображения, чтобы сделать это.

0 голосов
/ 05 декабря 2011

Если говорить о UIKit, это может быть UIImageView с изображениями, имеющими частично прозрачные области.

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