UIPinchGestureRecognizer
및 배율 방법을 사용하여지도의 그림을 프로그래밍 방식으로 배율을 조정할 수있는 것에 가깝습니다. 나는 스크롤 뷰를 다음과 같이 시도했다 : [mapScrollView addGestureRecognizer:pinchRecognizer];
,하지만 전체 뷰와 범위를 조절할 것이므로 물론 작동하지 않을 것이다. 내가한다면 [mapImageView addGestureRecognizer:pinchRecognizer]
아무 일도 일어나지 않을 것입니다.UIPinchGestureRecognizer로지도의 그림을 어떻게 스케일링해야합니까?
스크롤보기 내에서 이미지 크기를 조정하려면 어떻게해야합니까? 또한 최대 및 최소 스케일링 범위를 어떻게 설정합니까? 감사합니다
코드 :
- (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];
}
감사합니다. 그게 .. 누군가가보기에서 또는 뭔가보기로 래핑하여 이것을 해결하는 것을 보았다고 생각하지만, 그것은 더 쉬운 방법입니다. 그리고 당신 말이 맞아요, 나는 아마도 CATiledLayer를 사용할 필요가 있습니다. 왜냐하면 저는 메모리 문제로 달리고 때로는 부서 지기도합니다. – VagueExplanation
당신은 제 질문을 잘못 해석하지 않았습니다. – VagueExplanation