Перетаскивание вида изображения - PullRequest
0 голосов
/ 24 февраля 2012

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

Я написал такой код:

  -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
         //retrieve touch point
      CGPoint pt= [[ touches anyObject] locationInView:[self.view.subviews objectAtIndex:0]];
      startLocation = pt; 

     }

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

     CGPoint pt = [[touches anyObject] locationInView: [self.view.subviews objectAtIndex:0]];

     CGRect frame = [[self.view.subviews objectAtIndex:0]frame];
     frame.origin.x += pt.x - startLocation.x;
     frame.origin.y += pt.y - startLocation.y;
     [[self.view.subviews objectAtIndex:0] setFrame: frame];

}

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Возвращаемое значение метода locationInView - это точка относительно рамки просмотра.сначала проверьте, есть он или нет в окне просмотра.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     CGRect targetFrame = [self.view.subviews objectAtIndex:0].frame;
     //retrieve touch point
     CGPoint pt= [[ touches anyObject] locationInView:[self.view.subviews objectAtIndex:0]];
     //check if the point in the view frame      
     if (pt.x < 0 || pt.x > targetFrame.size.width || pt.y < 0 || pt.y > targetFrame.size.height)
     {
         isInTargetFrame = NO;
     }
     else
     {
         isInTargetFrame = YES;
         startLocation = pt; 
     }
 }

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
      if(!isInTargetFrame)
      {
          return;
      }
      //move your view here...
}
0 голосов
/ 24 февраля 2012

Попробуйте что-то вроде этого:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     //retrieve touch point
  startLocation = [[ touches anyObject] locationInView:self.view];
 // Now here check to make sure that start location is within the frame of 
 // your subview [self.view.subviews objectAtIndex:0]
 // if it is you need to have a property like dragging = YES 
 // Then in touches ended you set dragging = NO

 }

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

 CGPoint pt = [[touches anyObject] locationInView: [self.view.subviews objectAtIndex:0]];

 CGRect frame = [[self.view.subviews objectAtIndex:0]frame];
 frame.origin.x += pt.x - startLocation.x;
 frame.origin.y += pt.y - startLocation.y;
 [[self.view.subviews objectAtIndex:0] setFrame: frame];
...