3

私はいくつかのビューとイメージビューを持っています。

_contentView = [[UIView alloc] initWithFrame:self.bounds];
_contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
....

UIImageView *imageView = [[UIImageView alloc] initWithImage:someImage];
[_contentView addSubview:imageView];

この imageView はいくつかのアニメーションを実行します。

[UIView animateWithDuration:1.6f delay:0.0 options:UIViewAnimationOptionAllowUserInteraction |UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat animations:^{
    imageView.center = somePoint;
} completion:^(BOOL finished) {

}];

問題は、回転後のアニメーションが停止することです。_contentView の自動サイズ変更マスクを柔軟な境界に変更すると、回転後にアニメーションが続行されます。しかし、私はそれが柔軟なサイズである必要があります。回転後にアニメーションが停止する理由を誰か説明できますか?

4

3 に答える 3

2

2019年に..

その秘密は次の2つです。

1.アニメーションを再開する前に値をリセットする必要があります

その理由はまったくわかりませんが、完全に謎です。しかし、それは事実です。

2. コーディネーターの完了時に再起動する必要があります。

willTransition の本体など、他の場所では機能しません。

そう ...

アニメーション制約があります..

@IBOutlet var slider: NSLayoutConstraint!

(初期値は「55」としましょう)

継続的にアニメーション化してラッピング スクロールを作成します。たとえば、次のようにします。

func slide() {
    let w = sliderView.frame.width

    ////////// SECRET TIP ------->
    slider.constant = 55
    ////////// <--------SECRET TIP

    view.layoutIfNeeded()
    UIView.animate(withDuration: 10, delay: 0,
      options: [.repeat, .curveLinear, .beginFromCurrentState],
      animations:{ [weak self] in
        self?.slider.constant = w
        self?.view.layoutIfNeeded()
    })
}

Secret Tip の行を削除すると、機能しなくなります - 試してみてください!

画面が表示されたら開始します..

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    slide()
}

画面が回転すると、アニメーションが続きます。

override func willTransition(to newCollection: UITraitCollection,
  with coordinator: UIViewControllerTransitionCoordinator) {
    super.willTransition(to: newCollection, with: coordinator)
    coordinator.animate(alongsideTransition: { _ in
    },completion: { [weak self] _ in
        self?.slide()
    })
}

それでおしまい!

(実際には、アニメーションをキャンセル、一時停止、またはその他の方法で操作する必要はないことに注意してください。iOS は上記でスムーズに処理します。)

于 2019-07-25T19:53:06.410 に答える
-1

アニメーションの再生中はデバイスの回転を無効にし、アニメーションの再生中にデバイスが回転した場合は、アニメーションの後に画面を回転させます。これで問題は解決するはずです。

于 2013-02-21T16:24:56.373 に答える