向きを変えるときのiOSの動的アニメーションについて疑問に思っています。たとえば、私の iPad では、アニメーションはメニューで非常に「忠実」に見えます。要素 (アプリ、フォルダー、ドック、背景画像、ステータス バーなど) は、完璧な審美的な方法で適切な場所にスライドするように見えます...
しかし、App Store では、アプリ リストが別の配置になっているため、ずれを認識しました.
私の大きな質問: orientationChangeAnimation はまったく目の錯覚ですか、それとも本当に動的ですか? App Store では、実際の画面が回転しているように見えますが、同時にそのアルファ値が減少し、変更された画面の横向き/縦向きが同じ逆を行っています (アルファ値が増加すると同じピボットで回転します)。
質問する
778 次
2 に答える
1
実際、Springboard は (ドックのように) 物を動かしたり、(ほとんどのアプリ アイコンのように) アイテムをクロスフェードさせたりします。
viewWillLayoutSubviews
とは回転中にアニメーション ブロック内で呼び出されるためwillRotateToInterfaceOrientation
、新しい値をアルファやフレームなどのアニメート可能なプロパティに簡単に割り当てることができます。タイミングを明示的に制御する必要がない限り、明示的なanimateWithDuration:animations:
呼び出しは必要ありません。回転中に iOS が自動的にアニメーション化します。
例として、次のコードでは、赤と緑の四角形が画面の中央でクロスフェードし、回転中に青の四角形が左上と上中央の間を移動します。
CGRect b = self.view.bounds;
self.greenLabel = [[UILabel alloc] initWithFrame:CGRectMake(b.size.width / 2 - 50, b.size.height / 2 - 50, 100, 100)];
self.greenLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;
self.greenLabel.backgroundColor = [UIColor greenColor];
[self.view addSubview:self.greenLabel];
self.redLabel = [[UILabel alloc] initWithFrame:self.greenLabel.frame];
self.redLabel.autoresizingMask = self.greenLabel.autoresizingMask;
self.redLabel.backgroundColor = [UIColor redColor];
[self.view addSubview:self.redLabel];
self.blueLabel = [[UILabel alloc] init];
self.blueLabel.backgroundColor = [UIColor blueColor];
[self.view addSubview:self.blueLabel];
...
- (void)viewWillLayoutSubviews {
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {
self.greenLabel.alpha = 0;
self.redLabel.alpha = 1;
self.blueLabel.frame = CGRectMake((self.view.bounds.size.width - 100) / 2, 20, 100, 100);
} else {
self.greenLabel.alpha = 1;
self.redLabel.alpha = 0;
self.blueLabel.frame = CGRectMake(20, 20, 100, 100);
}
}
于 2012-07-14T08:12:52.037 に答える
1
ええ、それは実際には非常に簡単で、多くのアプリで同様のことを行っています。機能を複製したい場合は、これを行うことができます:
willRotateToInterfaceOrientation メソッドまたは viewWillLayoutSubviews メソッドで、次のいずれかを実行できます。
//Fade out
[UIView animateWithDuration:0.3 animations:^ {
yourController.view.alpha = 0.2;
}];
//Fade In
[UIView animateWithDuration:0.3 animations:^ {
yourController.view.alpha = 1.0;
}];
//Fade out fade in
[UIView animateWithDuration:0.15 animations:^ {
yourController.view.alpha = 0.2;
}];
[UIView animateWithDuration:0.15 animations:^ {
yourController.view.alpha = 1.0;
}];
乾杯、
サム
于 2012-07-13T11:23:39.797 に答える