【swift】UIViewAnimationCurveの設定を教えてください。
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,040
以下のコードに、UIViewAnimationCurveの設定をしたいのですが、
UIViewAnimationCurveEaseInOut、UIViewAnimationCurveLinearを
shop1,shop2それぞれに設定するには、どのように書けば動くようになるでしょうか。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
shop1.center.x += view.bounds.height
shop2.center.x += view.bounds.height
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
UIView.animate(withDuration: 1.5, animations: {
self.shop1.center.x -= self.view.bounds.height
self.shop2.center.x -= self.view.bounds.height
}, completion: nil)
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
それぞれにoption
を設定するには以下
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
UIView.animate(withDuration: 1.5, delay: 0.0, options: .curveEaseInOut, animations: {
self.shop1.center.x -= self.view.bounds.height
}, completion: nil)
UIView.animate(withDuration: 1.5, delay: 0.0, options: .curveLinear, animations: {
self.shop2.center.x -= self.view.bounds.height
}, completion: nil)
}
参考URL: iOS10からのAnimationがいい感じ!
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.12%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/01/08 10:33
以下のコードで2枚の画像が反転して入れ替わるのですが、
1秒おきに自動反転するには、どうすればいいでしょうか。
```
class ViewController: UIViewController {
var baseView:UIImageView!//アニメーションのベースとなるUIImageView
var animeView1:UIImageView!//アニメーションするUIImageView1
var animeView2:UIImageView!//アニメーションするUIImageView2
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
drawanimeView()
}
//アニメ用UIImageViewの描画
func drawanimeView() {
//UIImageViewの初期の大きさ
let _viewSize:CGPoint = CGPoint(x: 200, y: 300)
let _viewStart:CGPoint = CGPoint(x: (self.view.frame.size.width - _viewSize.x) / 2, y: (self.view.frame.size.height - _viewSize.y) / 2)
//UIImageViewの初期位置
var rect:CGRect = CGRect(x: _viewStart.x, y: _viewStart.y, width: _viewSize.x, height: _viewSize.y)
//アニメーショをするUIImageViewの位置と大きさ
baseView = drawView("", rect: rect, borderColor: UIColor.clear, borderwidth: 0, corner: 0, tag: 10)
//アニメーションするUIImageViewをのせるUIImageView
rect = CGRect(x: 0, y: 0, width: _viewSize.x, height: _viewSize.y)
//アニメーションするUIImageViewのbaseViewに対する相対位置(baseViewと同じ大きさ)
animeView1 = drawView("neko.png", rect: rect, borderColor: UIColor.clear, borderwidth: 0, corner: 0, tag: 1)
//アニメーション用UIImageVie
animeView1.backgroundColor = UIColor.white
animeView2 = drawView("neko2.png", rect: rect, borderColor: UIColor.clear, borderwidth: 0, corner: 0, tag: 2)
//アニメーション用UIImageView
self.view .addSubview(baseView)//baseViewをselfViewにのせる
baseView .addSubview(animeView2)//アニメーション用のUIImageViewをbaseViewにのせる
baseView .addSubview(animeView1)
baseView.isHidden = false
baseView.isUserInteractionEnabled = true
animeView1.isHidden = false
animeView1.isUserInteractionEnabled = true
animeView2.isHidden = true
}
//タッチイベントが発生したら
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touche = touches.first as UITouch!
let tag = touche!.view!.tag//タッチされたUIImageViewのtagを取得
print("tag=\(tag)")
if tag == 1 {//タッチされたのがanimeView1なら
let duration:TimeInterval = 2.0//アニメーションにかかる時間(s)
let opt = UIViewAnimationOptions.transitionFlipFromRight
flip(opt, duration: duration)
}
}
//フリップアニメーション関数
func flip(_ opt:UIViewAnimationOptions, duration:TimeInterval) {
let views = (frontView: animeView1, backView: animeView2)
UIView.transition(
with: baseView,
duration: 1.0,
options: opt,
animations: {
views.frontView.isHidden = true
views.backView.isHidden = false
}, completion: { finished in
self.timeout(2.0, next: "animeend")// アニメーション終了後の処理
})
}
//アニメーション終了後の処理
func animeend() {
for i in 1...2 {
let view:UIImageView = self.view .viewWithTag(i) as! UIImageView
view.removeFromSuperview()
}
drawanimeView()
}
//UIIMageViewの描画
func drawView(_ name:String, rect:CGRect, borderColor:UIColor, borderwidth:CGFloat, corner:CGFloat, tag:Int) -> UIImageView {
let image:UIImage? = UIImage(named: name)//イメージを取得
let view = UIImageView(image: image)//viewをイメージで定義
view.frame = rect//位置と大きさ
view.layer.borderColor = borderColor.cgColor//枠の色
view.layer.borderWidth = borderwidth//枠の太さ
view.layer.cornerRadius = corner//角丸の半径
view.clipsToBounds = true//角丸の許可
view.tag = tag
return view
}
//遅延動作
func timeout(_ time:TimeInterval, next:String){//time:遅延時間 next:遅延後に呼び出す関数名
let delay = time * Double(NSEC_PER_SEC)
let time = DispatchTime.now() + Double(Int64(delay)) / Double(NSEC_PER_SEC)
DispatchQueue.main.asyncAfter(deadline: time, execute: {
Thread.detachNewThreadSelector(Selector(next), toTarget:self, with: nil)
})
}
}
```
2017/01/08 10:55
let opt: UIViewAnimationOptions = [.transitionFlipFromRight, .repeat]
2017/01/08 11:37
以下のような表示にするには、どうすればいいでしょうか。
画像1を表示→10秒そのまま→反転して画像2を表示→10秒そのまま→反転して画像1を表示