2013-11-21 9 views
0

Как написать индивидуальный жест для увеличения размера представления во всем направлении (i.e) в исходной части и размере представления.Пользовательский жест для увеличения размера представления

Пример:

  1. пользователь должен касаться вида в любом из угла. либо близко к стороне происхождения, либо к стороне обзора.

Пример: размер рамы составляет (100,100,200,200)., а минимальное расстояние касания составляет 15 пикселей с любой стороны.

так, если сенсорная местоположение пользователя находится в (X=15,Y=40)

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

метод означает, что прикосновение вблизи к стороне происхождения.

же, если пользователь сенсорного расположение (X=15, Y=190) in

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

метод означает прикосновение находится рядом с бокового размером.

Мой код:

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

{ 

[super touchesBegan:touches withEvent:event]; 
if([touches count] != self.touchMinimumCount || 
    [[touches anyObject] tapCount] > self.tapMinimumCount) 
{ 
    self.state = UIGestureRecognizerStateFailed; 
    return; 
} 
self.startPoint = [[touches anyObject] locationInView:self.view]; 
self.viewFrame = self.view.frame; 

if(((self.startPoint.x - self.view.bounds.origin.x) <= self.minimumTouchDistance) || 
    ((self.startPoint.y - self.view.bounds.origin.y) <= self.minimumTouchDistance) || 
    ((ABS(self.startPoint.x - self.view.bounds.size.width)) <= self.minimumTouchDistance) || 
    ((ABS(self.startPoint.y - self.view.bounds.size.height)) <= self.minimumTouchDistance)) 
{ 
    self.state = UIGestureRecognizerStatePossible; 
    if(((self.startPoint.x - self.view.bounds.origin.x) <= self.minimumTouchDistance) || 
     ((self.startPoint.y - self.view.bounds.origin.y) <= self.minimumTouchDistance)) 
    { 
     self.currentTouchPosition = touchPositionIsOrigin; 
    } 
    else if(((ABS(self.startPoint.x - self.view.bounds.size.width)) <= self.minimumTouchDistance) || 
      ((ABS(self.startPoint.y - self.view.bounds.size.height)) <= self.minimumTouchDistance)) 
    { 
     self.currentTouchPosition = touchPositionIsSize; 
    } 
} 
else 
{ 
    self.state = UIGestureRecognizerStateFailed; 
} 
} 

Мой жест возможно состояние настройки, если штрихом в сторону только на ощупь расстояние.

Теперь я хочу изменить размер рамки просмотра в соответствии с движением пальца пользователя.

  1. Если пользователь коснется стороны происхождения и движется в направлении влево, вы хотите изменить начало. X вид и ширина также хотите увеличить.
  2. если пользователь коснется стороны происхождения и переместится в направлении верхнего направления, вы хотите изменить начало. Вид и ширина также должны увеличиваться.
  3. Если пользователь коснется стороны происхождения и движется вправо, значит, необходимо изменить начальную точку зрения.
  4. если пользователь коснется стороны происхождения и движется в направлении нижнего направления, вы хотите изменить начало координат.
  5. Если пользователь коснется стороны размера и движется в направлении влево, вы хотите уменьшить ширину обзора.
  6. Если пользователь коснется стороны размера и движется в направлении верхнего направления, вы хотите уменьшить высоту изображения.
  7. Если пользователь коснется стороны размера и движется вправо, значит, нужно увеличить ширину обзора.
  8. Если пользователь коснется стороны размера и движется в направлении нижнего направления, вы хотите увеличить высоту изображения.

все это изменяется в соответствии с пальцем пользователя в этом виде во время движения.

Мой код:

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

{ 

[super touchesMoved:touches withEvent:event]; 
if(self.state == UIGestureRecognizerStateFailed) return; 
direction currentDirection; 
CGPoint currentLocation = [[touches anyObject] locationInView:self.view]; 
if(self.state == UIGestureRecognizerStatePossible || 
    self.state == UIGestureRecognizerStateChanged) 
{ 
    if((currentLocation.x - self.startPoint.x) > 0) 
    { 
     currentDirection = directionRight; 
     self.state = UIGestureRecognizerStateChanged; 
     if(self.currentTouchPosition == touchPositionIsOrigin) 
     { 
      distanceInOriginX = // need to implement. 
      distanceInSizeX = // need to implement. 
     } 
     else if(self.currentTouchPosition == touchPositionIsSize) 
     { 
      distanceInSizeX = // need to implement. 
     } 
    } 
    else if((currentLocation.x - self.startPoint.x) < 0) 
    { 
     currentDirection = directionLeft; 
     self.state = UIGestureRecognizerStateChanged; 
     if(self.currentTouchPosition == touchPositionIsOrigin) 
     { 
      distanceInOriginX = // need to implement. 
      distanceInSizeX = // need to implement. 
     } 
     else if(self.currentTouchPosition == touchPositionIsSize) 
     { 
      distanceInSizeX = // need to implement. 
     } 
    } 

    else if((currentLocation.y - self.startPoint.y) >= 0) 
    { 
     currentDirection = directionBottom; 
     self.state = UIGestureRecognizerStateChanged; 
     if(self.currentTouchPosition == touchPositionIsOrigin) 
     { 
      distanceInOriginY = // need to implement. 
      distanceInSizeY = // need to implement. 
     } 
     else if(self.currentTouchPosition == touchPositionIsSize) 
     { 
      distanceInSizeY = // need to implement. 
     } 
    } 
    else if((currentLocation.y - self.startPoint.y) < 0) 
    { 
     currentDirection = directionTop; 
     self.state = UIGestureRecognizerStateChanged; 
     if(self.currentTouchPosition == touchPositionIsOrigin) 
     { 
      distanceInOriginY = // need to implement. 
      distanceInSizeY = // need to implement. 
     } 
     else if(self.currentTouchPosition == touchPositionIsSize) 
     { 
      distanceInSizeY = // need to implement. 
     } 
    } 
    else 
    { 
     currentDirection = directionUnknown; 
    } 
    self.originPoint = CGPointMake(distanceInOriginX, distanceInOriginY); 
    self.sizePoint = CGPointMake(distanceInSizeX, distanceInSizeY); 
} 
} 

я упомянул // необходимость осуществления. где когда-либо я хочу, чтобы код для достижения функциональности, о которой я упоминал в этих точках.так, любезно помогите пойти ahed.

Если у меня было неправильное средство, поделитесь лучшим способом сделать тот же тип жестов.

Любой пример есть также любезно предоставлен здесь. спасибо заранее.

ответ

0

Если вы хотите уменьшить размер изображения, используйте UIPinchGestureRecognizer. Пример кода приведен здесь

UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(scale:)]; 
    pinchRecognizer.delegate = self; 
    [self addGestureRecognizer:pinchRecognizer]; 

метод обработчик

#pragma mark - Gesture handling functions 



-(void)scale:(UIPinchGestureRecognizer*)recognizer { 

     if ([recognizer state] == UIGestureRecognizerStateBegan) { 
      _lastScale = 1.0; 
     } 

     CGFloat scale = 1.0 - (_lastScale - [recognizer scale]); 

     CGAffineTransform currentTransform = self.imgView.transform; 
     CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale); 

     self.imgView.transform = newTransform; 

     _lastScale = [recognizer scale]; 

    } 
+0

но пинч жест будет изменять вид по всей стороне, но я хочу только с одной стороны в одно время. – Nagarajan

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