gpt4 book ai didi

iphone - 我应该如何使用 UIPinchGestureRecognizer 缩放这张 map 图片?

转载 作者:行者123 更新时间:2023-11-29 11:23:56 25 4
gpt4 key购买 nike

我真的很接近能够使用 UIPinchGestureRecognizer 和缩放方法以编程方式缩放 map 图片。我试过像这样的 ScrollView :[mapScrollView addGestureRecognizer:pinchRecognizer];,但是这当然行不通,因为这会缩放整个 View 和边界。如果我执行 [mapImageView addGestureRecognizer:pinchRecognizer] 什么都不会发生。

如何在 ScrollView 中缩放图像?更重要的是,我如何设置最大和最小缩放比例的界限?谢谢

代码:

- (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];
}

最佳答案

我不确定,我不想测试但尝试添加

mapImageView.userInteractionEnabled = YES;

如果没有此设置,手势将无法在 ImageView 上工作。
编辑:也许我错误地解释了你的问题,你的缩放方法被调用但不起作用。


顺便说一句,你读过CATiledLayer吗? ?WWDC10 session 视频( session 104 - 使用 ScrollView 设计应用程序)中也有很好的介绍。您应该通过 developer.apple.com 访问该视频
你应该观看它,因为 2437x1536 的图像对于 iphone 来说是相当大的。您迟早会遇到性能和/或内存问题。

关于iphone - 我应该如何使用 UIPinchGestureRecognizer 缩放这张 map 图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4822564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com