0

画像を表示するフルスクリーンの UIScrollView があります。これは、Apple サンプル コードの PhotoScroller.app のコードをいくつか使用しています。回転を伴う scrollView 内の imageView と convertPoint の境界について少し混乱しています。どんな助けでも大歓迎です!

ps。詳細コードについては、境界の中心を参照してください。

NSLog の呼び出し willRotateToInterfaceOrientation:duration:

2012-05-12 11:35:45.666 imageScrollView frame X and Y are 0.000000 and 0.000000 
2012-05-12 11:35:45.672 imageScrollView frame Width and Height are 320.000000 and 480.000000 
2012-05-12 11:35:45.677 imageScrollView bounds origin X and Y are 0.000000 and 0.000000 
2012-05-12 11:35:45.682 imageScrollView bounds Width and Height are 320.000000 and 480.000000 
2012-05-12 11:35:45.686 imageView frame origin X and Y are 0.000005 and 0.374437
2012-05-12 11:35:45.689 imageView frame size Width and Height are 320.000000 and 479.251129
2012-05-12 11:35:45.693 imageView bounds origin X and Y are 0.000000 and 0.000000
2012-05-12 11:35:45.697 imageView bounds size Width and Height are 641.000000 and 959.999939
2012-05-12 11:35:45.701 boundsCenter X and Y are 160.000000 and 240.000000 
2012-05-12 11:35:45.705 convertPoint origin X and Y are 320.500000 and 479.999969

NSLog の呼び出し willAnimateRotationToInterfaceOrientation:duration:

2012-05-12 11:36:05.975 imageScrollView frame X and Y are 0.000000 and 0.000000 
2012-05-12 11:36:05.978 imageScrollView frame Width and Height are 480.000000 and 320.000000 
2012-05-12 11:36:05.983 imageScrollView bounds origin X and Y are 0.000000 and 0.000000 
2012-05-12 11:36:05.987 imageScrollView bounds Width and Height are 480.000000 and 320.000000 
2012-05-12 11:36:05.990 imageView frame origin X and Y are 80.000008 and 0.000017
//I am confused here. Why is the X is 80.000008, and Y is 0.000017, but not (80, -120)?
2012-05-12 11:36:05.994 imageView frame size Width and Height are 320.000000 and 479.251099
2012-05-12 11:36:06.002 imageView bounds origin X and Y are 0.000000 and 0.000000
2012-05-12 11:36:06.006 imageView bounds size Width and Height are 641.000000 and 959.999878
2012-05-12 11:36:06.009 boundsCenter X and Y are 240.000000 and 160.000000 
2012-05-12 11:36:06.014 convertPoint origin X and Y are 320.500000 and 320.499969

自動サイズ変更設定について:

actionSheetCoverView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
imageScrollView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
imageView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;

回転前のイメージビュー フレームの原点 (willRotateToInterfaceOrientation:duration の NSLog) は (0, 0) であり、回転後 (willAnimateRotationToInterfaceOrientation:duration:duration の NSLog:) は (80, -120) である必要があると思います。しかし、それは (80.000008, 0.000017) です。

4

2 に答える 2

1

このプロパティは、UIView の、、および プロパティに基づいて計算さframeれた値を常に返します。boundscentertransform

Apple のUIView ドキ​​ュメントによると:

transformプロパティが恒等変換でない場合、プロパティの値frameは定義されていないため、無視する必要があります。

問題は、回転アニメーションの開始時にプロパティを読み取っていることです。frameこれは、ビューに非同一transform値があり、そのframe値が無意味になることを意味します。

他の質問のコードに基づいて、次のように変換値をログに記録できます。

NSLog(@"imageScrollView transform %@", NSStringFromCGAffineTransform(self.transform));

NSLog(@"imageView transform %@", NSStringFromCGAffineTransform(imageView.transform));

これにより、回転時の変換プロパティが表示されます。Identity Transform に慣れていない場合は、[1, 0, 0, 1, 0, 0].

言い換えれば、frameプロパティが予期しない値を与える理由は、ビューがtransformそれに適用され、frameプロパティが無意味になるためです。

実際に何を達成しようとしているのかは明確ではありませんが、同じ Apple ドキュメントからの次のメモが役立つ場合があります。

transformプロパティに非恒等変換が含まれている場合、プロパティの値frameは未定義であり、変更しないでください。その場合、プロパティを使用してビューの位置を変更し、代わりにプロパティcenterを使用してサイズを調整できます。bounds

于 2012-05-19T06:35:17.343 に答える
1

説明したように、なぜ混乱しているのか、何をしようとしているのかを言わないと、助けになりません。

imageView の実際の中心を取得するには、これを使用できます。

imageView.center
于 2012-05-12T04:00:22.217 に答える