問題描述
我想要一個帶有圖像內容視圖的滾動視圖.圖像實際上是比屏幕大得多的地圖.地圖最初應該位于滾動視圖的中心,就像您將 iPhone 轉為橫向時照片應用程序中的照片一樣.
I would like to have scroll view with an image content view. The image is actually map which is much bigger than the screen. The map should be initially in the center of the scroll view, like photos in Photos app when you turn iPhone to landscape orientation.
我沒有設法讓地圖同時正確縮放和滾動.假設地圖圖像從屏幕頂部開始(縱向),代碼如下所示:
I did not manage to have the map in the center with correct zooming and scrolling at the same time. Provided that the map image starts from the top of the screen (in portrait orientation), the code looks something like:
- (void)loadView {
mapView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"map.jpg"]];
CGFloat mapHeight = MAP_HEIGHT * SCREEN_WIDTH / MAP_WIDTH;
mapView.frame = CGRectMake(0, 0, SCREEN_WIDTH, mapHeight);
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
scrollView.delegate = self;
scrollView.contentSize = mapView.frame.size;
scrollView.maximumZoomScale = MAP_WIDTH / SCREEN_WIDTH;
scrollView.minimumZoomScale = 1;
[scrollView addSubview:mapView];
self.view = scrollView;
}
當我將圖像框架移動到中心時,圖像只會從其框架的頂部向下增長.我嘗試使用 mapView 轉換,動態更改 imageView 的框架.到目前為止,沒有什么對我有用.
When I move the image frame to the center, the image grows only from the top of its frame down. I tried to play around with mapView transform, with dynamically changing frame of the imageView. Nothing works for me so far.
推薦答案
這段代碼應該可以在大多數版本的 iOS 上運行(并且已經過測試可以在 3.1 以上版本上運行).
This code should work on most versions of iOS (and has been tested to work on 3.1 upwards).
它基于 Jonah 的回答中提到的 Apple WWDC 代碼.
It's based on the Apple WWDC code mentioned in Jonah's answer.
將以下內容添加到您的 UIScrollView 子類中,并將 tileContainerView 替換為包含您的圖像或圖塊的視圖:
Add the below to your subclass of UIScrollView, and replace tileContainerView with the view containing your image or tiles:
- (void)layoutSubviews {
[super layoutSubviews];
// center the image as it becomes smaller than the size of the screen
CGSize boundsSize = self.bounds.size;
CGRect frameToCenter = tileContainerView.frame;
// center horizontally
if (frameToCenter.size.width < boundsSize.width)
frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width) / 2;
else
frameToCenter.origin.x = 0;
// center vertically
if (frameToCenter.size.height < boundsSize.height)
frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height) / 2;
else
frameToCenter.origin.y = 0;
tileContainerView.frame = frameToCenter;
}
這篇關于具有居中 UIImageView 的 UIScrollView,如照片應用的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!