2016-11-30 3 views
1

Ich habe diesen Code, der die Pinch-Geste behandelt und den Skalierungswert erhält und an die updateViewBounds-Funktion übergibt.Ändern der Größe von UIView mit UIPinchGestureRecognizer

func pinchedOnView(gesture : UIPinchGestureRecognizer) { 

     switch gesture.state 
     { 
     case UIGestureRecognizerState.began: 

      self.resizableView.updateViewBounds(scale: gesture.scale , initialBounds: self.resizableView.bounds) 

     case UIGestureRecognizerState.changed : 

      self.resizableView.updateViewBounds(scale: gesture.scale, initialBounds: self.resizableView.bounds) 

     default :() 
     } 
    } 

Also diese Funktion nimmt die Eingabe-Skala findet den entsprechenden Rahmen und aktualisiert den Ansichtsrahmen.

public func updateViewBounds(scale : CGFloat,initialBounds : CGRect) { 

     let zt = CGAffineTransform(scaleX: scale, y: scale) 
     let tempBounds = initialBounds.applying(zt) 

     if tempBounds.width < UIScreen.main.bounds.width - 20 && tempBounds.height < UIScreen.main.bounds.height - 20 { 

      if tempBounds.height > 300 || tempBounds.width > 300 { 
        self.bounds = tempBounds 
      } 
      else { 

      } 
     } 
    } 

Ja, diese Funktion funktioniert einwandfrei, aber es ist sehr schnell. Ja, wir wissen, dass UIPinchGestureRecognizer jeden Bruchteil der Werte zurückgibt.

Ich möchte der Benutzer eine sehr ordnungsgemäße Ansicht Größe ändern sehen, ich möchte nicht die Ansicht für jeden Bruchteil Wert zu aktualisieren. Irgendwelche Gedanken?

+0

Haben Sie den Fall '.ended' mit' Gesten.State' versucht –

Antwort

1

Das Problem liegt daran, dass Sie die skalierte Version der in jedem Untersequenzschritt gebundenen Ansicht skalieren, indem Sie die relative Skalierung in Bezug auf die ursprünglichen Ansichtsgrenzen verwenden.

Ich denke, Sie müssen die anfänglichen Ansicht Grenzen der Zielansicht auf .begin speichern und diesen Wert verwenden, um die updateViewBounds aufrufen. Ein anderer Weg wäre, gesture.scale = 1.0 am Ende Ihrer Gesten-Handler-Funktion zu setzen.

Verwandte Themen