Frage

Ich bin sehr kurz davor, ein Bild einer Karte programmatisch mit zu skalieren UIPinchGestureRecognizer und eine Skalenmethode. Ich habe eine Scrollansicht wie diese ausprobiert: [mapScrollView addGestureRecognizer:pinchRecognizer];, Aber natürlich wird das nicht funktionieren, weil das die gesamte Sicht und die Grenzen skaliert wird. Wenn ich mache [mapImageView addGestureRecognizer:pinchRecognizer] Nichts wird passieren.

Wie skalle ich das Bild in der Bildlaufansicht? Noch mehr, wie setze ich Grenzen von Max und Min Scaling? Vielen Dank

Der 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];
}
War es hilfreich?

Lösung

Ich weiß es nicht genau und ich möchte nicht testen, aber versuchen Sie hinzuzufügen

mapImageView.userInteractionEnabled = YES;

Gesten funktionieren ohne diese Einstellung nicht auf ImageViews.
Bearbeiten: Vielleicht habe ich Ihre Frage falsch interpretiert und Ihre Skalierungsmethode wird aufgerufen, funktioniert aber nicht.


Übrigens, haben Sie darüber gelesen CatiledLayer? Es gibt auch eine großartige Einführung in den Sitzungsvideos von WWDC10 (Sitzung 104 - Entwerfen von Apps mit Scroll -Ansichten). Sie sollten dieses Video über Developer.apple.com erreichen
Sie sollten es sich ansehen, denn ein 2437x1536 -Bild ist für das iPhone ziemlich groß. Sie werden früher oder später auf Leistung und/oder Speicherprobleme stoßen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top