Iphone 我应该如何使用UIPinchGestureRecognizer缩放此地图图片?
我几乎可以用Iphone 我应该如何使用UIPinchGestureRecognizer缩放此地图图片?,iphone,xcode,ipad,ios,pinch,Iphone,Xcode,Ipad,Ios,Pinch,我几乎可以用uipinchgestureerecognizer和缩放方法以编程方式缩放地图图片。我尝试过这样的滚动视图:[mapScrollView addgestureRecognitor:PinchreRecogniter],但这当然不起作用,因为这将缩放整个视图和边界。如果我执行[mapImageView addgestureRecognitizer:PinchreRecognitizer]则不会发生任何事情 如何在滚动视图中缩放图像?更重要的是,如何设置最大和最小缩放的界限?谢谢 守则:
uipinchgestureerecognizer
和缩放方法以编程方式缩放地图图片。我尝试过这样的滚动视图:[mapScrollView addgestureRecognitor:PinchreRecogniter]代码>,但这当然不起作用,因为这将缩放整个视图和边界。如果我执行[mapImageView addgestureRecognitizer:PinchreRecognitizer]
则不会发生任何事情
如何在滚动视图中缩放图像?更重要的是,如何设置最大和最小缩放的界限?谢谢
守则:
- (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];
}
-(id)initWithFrame:(CGRect)frame{
self=[super initWithFrame:frame];
如果(自我){
mainMenuAppDelegate*del=(mainMenuAppDelegate*)[[UIApplication sharedApplication]委托];
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(24371536);
UIImage*mapImage=[UIImage ImageName:[map_列表对象索引:mapNum]];
mapImageView=[[UIImageView alloc]initWithImage:mapImage];
mapScrollView.bounces=否;
[地图图像发布];
[mapScrollView添加子视图:mapImageView];
[自添加子视图:mapScrollView];
UIPinchGestureRecognizer*pinchRecognizer=[[UIPinchGestureRecognizer alloc]initWithTarget:自操作:@selector(scale:)];
[mapImageView addgestureRecognitor:PinchreRecogniter];
[钳形释放];
UIImage*footerMapIMG=[UIImage ImageName:@“footer\u map\u alternate.png”];
UIImageView*footerMapView=[[UIImageView alloc]initWithImage:(UIImage*)footerMapIMG];
CGRect footerMapFrame=CGRectMake(0686213,82);
footerMapView.frame=footerMapFrame;
[自添加子视图:footerMapView];
footerMapView.image=footerMapIMG;
[footerMapView发布];
CGRect backBTNFrame=CGRectMake(20714,140,52);
UIButton*MAP_backButton=[[UIButton alloc]init];
MAP_backButton.frame=backBTNFrame;
UIImage*MAP_backButtonIMG=[UIImage ImageName:@“button_back.png”];
[MAP_backButton setImage:MAP_backButtonIMG for state:UIControlStateNormal];
MAP_backButton.backgroundColor=[UIColor clearColor];
[自添加子视图:映射返回按钮];
[MAP_backButton release];
[MAP_backButton addTarget:del.switchVC
操作:@选择器(GoToMandListChooser)
forControlEvents:UIControlEventTouchUpInside];
}
回归自我;
}
-(无效)刻度:(id)发送者{
if([(UIPinchGestureRecognizer*)发送方状态]==UIGestureRecognizerStateEnded){
lastScale=1.0;
返回;
}
CGFloat scale=1.0-(lastScale-[(uipinchgestrerecognizer*)发送方比例];
/*
如果(比例>1){
比例=1;
}
如果(比例<.5){
量表=.5;
}
*/
CGAffineTransform currentTransform=[(UIPinchGetureRecognitizer*)发件人视图]。转换;
CGAffineTransform newTransform=CGAffineTransformScale(当前变换,缩放,缩放);
[[(UIPinchGestureRecognitor*)发送方视图]设置转换:新转换];
lastScale=[(UIPinchGestureRecognizer*)发送方比例];
}
我不确定,我不想测试,但尝试添加
mapImageView.userInteractionEnabled = YES;
没有此设置,手势在图像视图上不起作用。
编辑:也许我把你的问题解释错了,你的缩放方法被调用了,但不起作用
顺便说一句,你读过这篇文章吗?
WWDC10会话视频(会话104-使用滚动视图设计应用程序)中也有精彩的介绍。您应该通过developer.apple.com访问该视频
你应该看它,因为2437x1536的图像对于iphone来说是相当大的。您迟早会遇到性能和/或内存问题 谢谢!就这样。。我想我见过有人通过将一个视图包装成一个视图或其他东西来解决这个问题,但这更简单。你是对的,我可能需要使用CATiledLayer,因为我遇到了内存问题,有时会崩溃,等等。