Границы и привязка программного UIScrollView с масштабированием - PullRequest
0 голосов
/ 29 января 2011

Итак, мне удалось создать UIScrollView с методом масштабирования программным способом, но я немного застрял, как решить проблему, возникающую при масштабировании:

  1. КогдаЯ увеличиваю или уменьшаю точку, в которой она расширяется / убирается, не происходит, когда я делаю жест щипка, это происходит в углу.

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

Кроме этого, я так близок к тому, чтобы заставить его работать на 100%,Я пытался поиграть с ахорпойнтами, но похоже, что прокрутка и просмотр изображений не отвечают на это.

Вот важные вещи в листинге кода:

UIScrollView *mapScrollView;

UIImageView *mapImageView;

CGFloat lastScale = 0;

NSMutableArray *map_List;


- (id)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];
    if (self) {

  mainMenuAppDelegate *del = (mainMenuAppDelegate *)[[UIApplication sharedApplication] delegate];

  map_List = [[NSMutableArray alloc] init];
  [map_List addObject:@"Pacific_Map_8bit.png"];
  [map_List addObject:@"Atlantic_Map_8bit.png"];


  CGRect mapScrollViewFrame = CGRectMake(0, 0, 1024, 768);

  mapScrollView = [[UIScrollView alloc]   initWithFrame:mapScrollViewFrame];

  mapScrollView.contentSize = CGSizeMake(2437, 1536);


  UIImage *mapImage = [UIImage imageNamed:[map_List objectAtIndex:mapNum]];

  mapImageView = [[UIImageView alloc] initWithImage: mapImage];

  mapScrollView.bounces = NO;

  [mapImage release];

  [mapScrollView addSubview:mapImageView];
  [self addSubview:mapScrollView];

  mapImageView.userInteractionEnabled = YES;


  UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
  [mapImageView addGestureRecognizer:pinchRecognizer];

  [pinchRecognizer release];
    }
    return self;

} 
// the scale method thats triggered to zoom when pinching
-(void)scale:(id)sender {

 if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {

  lastScale = 1.0;
  return;
 }

 CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]);

 NSLog(@"map scale %f", scale);

 CGFloat mapWidth = mapImageView.frame.size.width;
 CGFloat mapHeight = mapImageView.frame.size.height;
 NSLog(@"map width %f", mapWidth);

 if(scale>=1 & mapWidth<=4000 || scale<1 & mapWidth>=1234){

  CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
  CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
  [[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform];

  lastScale = [(UIPinchGestureRecognizer*)sender scale];

 }

 mapScrollView.contentSize = CGSizeMake(mapWidth, mapHeight);

}

Спасибо!

1 Ответ

2 голосов
/ 29 января 2011

UIScrollView имеет встроенную поддержку масштабирования. Все, что вам нужно сделать, это установить свойства minimumZoomScale и maximumZoomScale и вернуть вид, который будет использоваться для масштабирования, используя viewForZoomingInScrollView.

...