0

ボタンをUITextField押すと、View Controllerにアニメーション化する(右側からビューに移動する)があります。ただし、UITextFieldまたは他のビューを押すと、がUITextField消えます。UITextFieldが消えないようにするにはどうすればよいでしょうか。次のコードを使用しています。

@IBAction func joinCircleButton(sender: AnyObject) {
    let button = sender as UIButton
    joinTextField.frame.origin.x=500
    joinTextField.frame.origin.y=100
    if (button.frame.origin.x - 75>0){
    UIView.animateWithDuration(0.5, animations:{
        button.frame = CGRectMake(button.frame.origin.x - 125, button.frame.origin.y,button.frame.size.width, button.frame.size.height)
        button.transform = CGAffineTransformMakeScale(0.5, 0.5);
        self.joinTextField.frame=CGRectMake(self.joinTextField.frame.origin.x - 325, self.joinTextField.frame.origin.y,self.joinTextField.frame.size.width, self.joinTextField.frame.size.height)

    })
    }
}
override func viewDidLayoutSubviews(){
    joinTextField.center = CGPointMake(joinTextField.frame.origin.x-500, joinTextField.frame.origin.y)


}
4

2 に答える 2

0

自動レイアウトでは、ビューのフレームを変更できません。代わりに、制約を変更して を呼び出すとしますsetNeedsUpdateConstraints()。ビューの位置を一時的に変更するアニメーションを実行する必要がある場合はCGAffineTransform、特に を使用してCGAffineTransformMakeTranslate()、 「ビューを移動するポイント数」を指定txして表すことができます。tyコード内で変換を使用してスケールをアニメーション化することもできるためCGAffineTransformConcat、スケール コマンドと変換コマンドをビューに設定できるコマンドに「マージ」するために使用できます。

アニメーション メソッドは次のようになります。

UIView.animateWithDuration(0.5) {
    let trans = CGAffineTransformMakeTranslation(-125, 0)
    let scale = CGAffineTransformMakeScale(0.5, 0.5)
    button.transform = CGAffineTransformConcat(trans, scale)
    self.joinTextField.transform = CGAffineTransformMakeTranslation(-325, 0)
}

Apple Docs で CGAffineTransform の詳細を確認する

コードの残りの部分については、フレームを取得してif.

于 2015-01-05T05:30:12.267 に答える