Je suis vraiment proche d'être capable de mettre à l'échelle une image d'une carte par programmation avec UIPinchGestureRecognizer
et une méthode d'échelle. J'ai essayé une vue de défilement comme ceci: [mapScrollView addGestureRecognizer:pinchRecognizer];
, mais bien sûr cela ne fonctionnera pas parce que cela mettra à l'échelle l'ensemble de la vue et les limites. Si je fais [mapImageView addGestureRecognizer:pinchRecognizer]
rien ne se passera.Comment devrais-je redimensionner cette image de carte avec UIPinchGestureRecognizer?
Comment redimensionner l'image dans la vue défilement? Encore plus, comment puis-je définir des limites de mise à l'échelle max et min? Merci
Le code:
- (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];
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
[mapImageView addGestureRecognizer:pinchRecognizer];
[pinchRecognizer release];
UIImage *footerMapIMG = [UIImage imageNamed:@"footer_map_alternate.png"];
UIImageView *footerMapView = [[UIImageView alloc] initWithImage:(UIImage *)footerMapIMG];
CGRect footerMapFrame = CGRectMake(0, 686, 213, 82);
footerMapView.frame = footerMapFrame;
[self addSubview:footerMapView];
footerMapView.image = footerMapIMG;
[footerMapView release];
CGRect backBTNFrame = CGRectMake(20, 714, 140, 52);
UIButton *MAP_backButton = [[UIButton alloc] init];
MAP_backButton.frame = backBTNFrame;
UIImage *MAP_backButtonIMG = [UIImage imageNamed:@"button_back.png"];
[MAP_backButton setImage:MAP_backButtonIMG forState:UIControlStateNormal];
MAP_backButton.backgroundColor = [UIColor clearColor];
[self addSubview:MAP_backButton];
[MAP_backButton release];
[MAP_backButton addTarget:del.switchVC
action:@selector(gotoMapAndListChooser)
forControlEvents:UIControlEventTouchUpInside];
}
return self;
}
-(void)scale:(id)sender {
if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
lastScale = 1.0;
return;
}
CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]);
/*
if(scale > 1){
scale = 1;
}
if(scale < .5){
scale = .5;
}
*/
CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
[[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform];
lastScale = [(UIPinchGestureRecognizer*)sender scale];
}
Merci! C'était ça .. Je pense que j'ai vu quelqu'un résoudre ça en entourant une vue dans une vue ou quelque chose, mais c'est beaucoup plus facile. Et vous avez raison, je dois probablement utiliser le CATiledLayer parce que je suis en train de courir dans des problèmes de mémoire, parfois s'écraser, etc – VagueExplanation
Vous n'avez pas interprété ma mauvaise question. – VagueExplanation