Ứng dụng của tôi có UIScrollView với một chế độ xem phụ. Subview là một UIView mở rộng để in một trang PDF cho chính nó bằng cách sử dụng các lớp trong sự kiện drawLayer.UIScrollView zoomToRect không phóng to đến tận gốc (được tạo từ UITouch CGPoint)
Phóng to bằng cách sử dụng công cụ kẹp được tích hợp sẵn tuyệt vời. setZoomScale cũng hoạt động như mong đợi.
Tôi đã đấu tranh với chức năng zoomToRect. Tôi tìm thấy một ví dụ trực tuyến mà làm cho một biến zoomRect CGRect từ một CGPoint nhất định.
Khi chạm vàoChức năng được hiển thị, nếu có một lần nhấn đúp và tất cả chúng đều được thu nhỏ, tôi muốn phóng to PDFUIView mà tôi tạo ra như thể chúng đang véo với tâm của pinch nơi chúng được nhấn đúp .
Vì vậy, giả sử rằng tôi chuyển biến UITouch cho hàm của tôi sử dụng zoomToRect nếu chúng nhấn đúp.
tôi bắt đầu với các chức năng sau đây tôi tìm thấy trên táo trang web:
Sau đây là một phiên bản sửa đổi cho UIScrollView lớp mở rộng của tôi:
- (void)zoomToCenter:(float)scale withCenter:(CGPoint)center {
CGRect zoomRect;
zoomRect.size.height = self.frame.size.height/scale;
zoomRect.size.width = self.frame.size.width/scale;
zoomRect.origin.x = center.x - (zoomRect.size.width/2.0);
zoomRect.origin.y = center.y - (zoomRect.size.height/2.0);
//return zoomRect;
[self zoomToRect:zoomRect animated:YES];
}
Khi tôi làm điều này, UIScrollView dường như thu phóng bằng cách sử dụng cạnh dưới cùng bên phải của zoomRect ở trên và không phải là trung tâm.
Nếu tôi làm như thế này UIView
UIView *v = [[UIView alloc] initWithFrame:zoomRect];
[v setBackgroundColor:[UIView redColor]];
[self addSubview:v];
Hộp màu đỏ xuất hiện với các điểm tiếp xúc chết ở trung tâm.
Xin lưu ý: Tôi đang viết thư này từ máy tính của mình, tôi nhớ lại việc chia nhỏ hai phần trên máy Mac của tôi, vì vậy hãy giả sử rằng điều này vẽ thẳng với điểm tiếp xúc ở giữa. Nếu UIView đã vẽ ra khỏi trung tâm nhưng thu nhỏ đến đúng chỗ nó sẽ là tất cả tốt.
Tuy nhiên, điều gì sẽ xảy ra là khi nó chỉnh sửa zoomToRect, dường như sử dụng góc dưới cùng bên phải của zoomRect ở trên cùng bên trái của kết quả được phóng to.
Ngoài ra, tôi nhận thấy rằng tùy thuộc vào nơi tôi nhấp vào UIScrollView, nó neo đến các điểm khác nhau. Nó gần như có vẻ như có một chéo xuống giữa và nó phản ánh các điểm bằng cách nào đó như bất cứ nơi nào còn lại của giữa là một phản ánh tiêu cực và bất cứ nơi nào bên phải của trung là một sự phản ánh tích cực?
Điều này có vẻ phức tạp, không nên nó chỉ thu phóng đến trực tiếp được rút ra khi UIView có thể vẽ?
Tôi đã sử dụng rất nhiều nghiên cứu để tìm hiểu cách tạo PDF có quy mô chất lượng cao, vì vậy tôi giả định rằng việc sử dụng CALayer có thể đang ném ra khỏi hệ tọa độ? Nhưng với UIScrollView nó chỉ nên coi nó như một khung nhìn với kích thước 768x985.
Đây là loại nâng cao, hãy giả sử mã để tạo zoomRect là tất cả đều tốt. Có một cái gì đó sâu hơn với CALayer trong UIView mà là trong UIScrollView ....
cuối bình luận, nhưng tôi không thể cưỡng lại; nếu điều này hoạt động: đó là may mắn tinh khiết. Nhân tọa độ của một trung tâm không có ý nghĩa gì cả. Nếu bạn cần thực hiện bản dịch trên một trung tâm, bạn sẽ thêm giá trị thay thế. Nhưng rất có thể, trung tâm không chính xác vì nó được tính toán từ tham chiếu hệ tọa độ sai (ví dụ: từ góc nhìn sai) – jyavenard