UIScrollView с центрированным UIImageView, как приложение Фотографии - PullRequest
37 голосов
/ 12 марта 2009

Я хотел бы иметь представление прокрутки с представлением содержимого изображения. Изображение на самом деле карта, которая намного больше, чем экран. Сначала карта должна находиться в центре представления с прокруткой, как фотографии в приложении «Фотографии», когда вы переключаете iPhone в альбомную ориентацию.

alt text

Мне не удалось разместить карту в центре с правильным масштабированием и прокруткой одновременно. При условии, что изображение карты начинается сверху экрана (в портретной ориентации), код выглядит примерно так:

- (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. Пока у меня ничего не работает.

Ответы [ 11 ]

0 голосов
/ 08 сентября 2009

Примечание: этот метод работает. если изображение меньше, чем imageView, оно будет частично прокручиваться за пределы экрана. Ничего страшного, но и не так приятно, как приложение для фотографий.

Во-первых, важно понимать, что мы имеем дело с двумя видами: видом изображения с изображением в нем и видом прокрутки с изображением в нем. Итак, сначала установите imageview по размеру экрана:

 [myImageView setFrame:self.view.frame];

Затем отцентрируйте свое изображение на изображении:

 myImageView.contentMode = UIViewContentModeCenter;

Вот весь мой код:

- (void)viewDidLoad {
AppDelegate *appDelegate = (pAppDelegate *)[[UIApplication sharedApplication] delegate];
 [super viewDidLoad];
 NSString *Path = [[NSBundle mainBundle] bundlePath];
 NSString *ImagePath = [Path stringByAppendingPathComponent:(@"data: %@", appDelegate.MainImageName)];
 UIImage *tempImg = [[UIImage alloc] initWithContentsOfFile:ImagePath];
 [imgView setImage:tempImg];

 myScrollView = [[UIScrollView alloc] initWithFrame:[[self view] bounds]];
 [myScrollView addSubview:myImageView];

//Set ScrollView Appearance
 [myScrollView setBackgroundColor:[UIColor blackColor]];
 myScrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;

//Set Scrolling Prefs
 myScrollView.bounces = YES;
 myScrollView.delegate = self;
 myScrollView.clipsToBounds = YES; // default is NO, we want to restrict drawing within our scrollview
 [myScrollView setCanCancelContentTouches:NO];
 [myScrollView setScrollEnabled:YES];


//Set Zooming Prefs
 myScrollView.maximumZoomScale = 3.0;
 myScrollView.minimumZoomScale = CGImageGetWidth(tempImg.CGImage)/320;
 myScrollView.zoomScale = 1.01; //Added the .01 to enable scrolling immediately upon view load.
 myScrollView.bouncesZoom = YES;


 [myImageView setFrame:self.view.frame];//rect];// .frame.size.height = imageHeight;
 myImageView.contentMode = UIViewContentModeCenter;
 self.view = myScrollView;
 [tempImg release];
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...