Tôi đã làm việc trên bản đồ thay thế trong một thời gian ngắn. Toàn bộ tác phẩm hoạt động với UIScrollView
được hỗ trợ bởi CATiledLayer
.UIScrollView setZoomScale đặt xoay vòng được áp dụng trở về Zero
Để xoay bản đồ của tôi, tôi xoay chính lớp đó. (Sử dụng CATransform3DMakeRotation
) Làm việc khá tốt cho đến nay =)
Nhưng nếu tôi bao giờ gọi setZoomScale
phương pháp CATransform3D
có nghĩa là sẽ được đệ trình lên lớp của tôi là thiết lập lại xoay để 0.
Câu hỏi của tôi là, là có bất kỳ cách nào để đặt zoomscale
của scrollView của tôi mà không mất vòng xoay được áp dụng?
Cùng một vấn đề tồn tại đối với cử chỉ chụm.
// Infos bổ sung
Để xoay quanh Vị trí hiện tại, tôi phải chỉnh sửa điểm neo. Có lẽ đây cũng là một vấn đề cho việc mở rộng quy mô.
- (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];
}
}
Hey Bartosz, trước hết, cảm ơn bạn vì bài đăng đó! Nhưng điều đó không hiệu quả đối với tôi ... Tôi đã chỉnh sửa điểm neo để xoay quanh vị trí hiện tại. Có lẽ đó là vấn đề? Tôi sẽ chỉnh sửa bài đăng của mình và thêm mã đó. –
Vì vậy, nó giữ lại vòng xoay, nhưng trục quay sai, phải không? –
Tôi thực sự không thể nói. Chỉ từ những gì tôi thấy, nó xoay quanh nhiều điểm kỳ lạ. Nhưng trục có vẻ đúng. –