問(wèn)題描述
我想要一個(gè)帶有圖像內(nèi)容視圖的滾動(dòng)視圖.圖像實(shí)際上是比屏幕大得多的地圖.地圖最初應(yīng)該位于滾動(dòng)視圖的中心,就像您將 iPhone 轉(zhuǎn)為橫向時(shí)照片應(yīng)用程序中的照片一樣.
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.
我沒(méi)有設(shè)法讓地圖同時(shí)正確縮放和滾動(dòng).假設(shè)地圖圖像從屏幕頂部開(kāi)始(縱向),代碼如下所示:
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;
}
當(dāng)我將圖像框架移動(dòng)到中心時(shí),圖像只會(huì)從其框架的頂部向下增長(zhǎng).我嘗試使用 mapView 轉(zhuǎn)換,動(dòng)態(tài)更改 imageView 的框架.到目前為止,沒(méi)有什么對(duì)我有用.
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.
推薦答案
這段代碼應(yīng)該可以在大多數(shù)版本的 iOS 上運(yùn)行(并且已經(jīng)過(guò)測(cè)試可以在 3.1 以上版本上運(yùn)行).
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.
將以下內(nèi)容添加到您的 UIScrollView 子類(lèi)中,并將 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;
}
這篇關(guān)于具有居中 UIImageView 的 UIScrollView,如照片應(yīng)用的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!