2016-11-30 5 views
1

私はピンチジェスチャーを処理し、スケール値を取得してupdateViewBounds関数に渡すこのコードを持っています。UIPinchGestureRecognizerを使用したUIViewのサイズ変更

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 :() 
     } 
    } 

この関数は、入力スケールを取得して対応するフレームを見つけ、ビューフレームを更新します。

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 { 

      } 
     } 
    } 

この機能は正常に動作しますが、非常に高速です。はい、私たちは、UIPinchGestureRecognizerが値の各部分を返すことを知っています。

私はユーザーに非常に適切なビューのサイズ変更を見せたいと思っています。私は価値のすべての部分についてビューを更新したくありません。何かご意見は?

+0

'' .end'を 'gesture.state'で試してみましたか? –

答えて

1

問題は、元のビュー境界に対する相対的なスケールを使用して、各サブシーケンス・ステップでバインドされたビューのスケーリングされたバージョンをスケーリングすることによる問題です。

ターゲット表示の初期表示範囲を.beginに保存し、この値を使用してupdateViewBoundsを呼び出す必要があると思います。もう1つの方法は、ジェスチャーハンドラー機能の最後にgesture.scale = 1.0を設定することです。

関連する問題