私はかなり長い間マップの置き換えに取り組んできました。全体が にUIScrollView
裏打ちされたで動作しCATiledLayer
ます。
マップを回転するには、レイヤー自体を回転させます。(使用CATransform3DMakeRotation
)これまでのところかなりうまく機能します=)
しかし、レイヤーに送信されるsetZoomScale
メソッドを呼び出すCATransform3D
と、回転が0にリセットされます。
私の質問は、zoomscale
適用された回転を失うことなく scrollView を設定する方法はありますか?
ピンチ ジェスチャについても同じ問題が存在します。
//追加情報
現在の位置を中心に回転するには、アンカー ポイントを編集する必要があります。たぶん、これはスケーリングの問題でもあります。
- (void)correctLayerPosition {
CGPoint position = rootView.layer.position;
CGPoint anchorPoint = rootView.layer.anchorPoint;
CGRect bounds = rootView.bounds;
// 0.5, 0.5 is the default anchorPoint; calculate the difference
// and multiply by the bounds of the view
position.x = (0.5 * bounds.size.width) + (anchorPoint.x - 0.5) * bounds.size.width;
position.y = (0.5 * bounds.size.height) + (anchorPoint.y - 0.5) * bounds.size.height;
rootView.layer.position = position;
}
- (void)onFinishedUpdateLocation:(CLLocation *)newLocation {
if (stayOnCurrentLocation) {
[self scrollToCurrentPosition];
}
if (rotationEnabled) {
CGPoint anchorPoint = [currentConfig layerPointForLocation:newLocation];
anchorPoint.x = anchorPoint.x / rootView.bounds.size.width;
anchorPoint.y = anchorPoint.y / rootView.bounds.size.height;
rootView.layer.anchorPoint = anchorPoint;
[self correctLayerPosition];
}
}