2017-03-17 10 views
0

UIViewサブクラスを作成しようとしています。初期化では、サブクラスに必要なy軸の最小値と最大値を設定します。このビューは、ユーザーのジェスチャーまたはアニメーションを使用して、プログラムで上下に移動します。私はこのためにwillSetプロパティのユーザーを使用することができ期待していた:WillSetプロパティオブザーバで値を変更する

override var frame: CGRect { 
    willSet { 
     if newValue.origin.y > maximumOriginY { 
      self.frame.origin.y = maximumOriginY 
     } 
     if newValue.origin.y < minimumOriginY { 
      self.frame.origin.y = minimumOriginY 
     } 
    } 
} 

しかし、何もしていないようです。 DidSetプロパティオブザーバを使用しようとしましたが、これは設定された後に原点をリセットし、吃音アニメーションになります。どのようにこれをプロパティオブザーバーや別の方法で動作させるためのアイデアですか?ありがとう

+0

両方の条件は同じだと思います。 –

+0

投稿が編集されました。タイプミスがありました –

答えて

3

willSetオブザーバ内の値を変更することはできません。ゲッターとセッターをオーバーライドすることができます:

override var frame: CGRect { 
    get { return super.frame } 
    set { 
     var tempFrame = newValue 
     tempFrame.origin.y = min(max(tempFrame.origin.y, minimumOriginY), maximumOriginY) 
     super.frame = tempFrame 
    } 
} 
関連する問題