2011-02-08 1 views
1

Эй. Я достиг делает программный UIScrollView с масштабированием, но теперь я пытался взять прокручивать/масштабируемые изображения на внешний экран, если подключен.Прокрутка UIScrollView на внешнем экране, прикрепленная к iPad

@implementation MapVC 

UIScrollView *mapScrollView; 

UIImageView *mapImageView; 

UIImageView *mapImageViewEx; 

CGFloat lastScale = 0; 

NSMutableArray *map_List; 


- (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.png"]; 
     [map_List addObject:@"Atlantic_Map.png"]; 


     CGRect mapScrollViewFrame = CGRectMake(0, 0, 1024, 768); 

     mapScrollView = [[UIScrollView alloc] initWithFrame:mapScrollViewFrame]; 

     mapScrollView.backgroundColor = [UIColor blackColor]; 

     [mapScrollView setDelegate:(id<UIScrollViewDelegate>)self]; 

     mapScrollView.contentSize = CGSizeMake(2437, 1536); 

     mapScrollView.bounces = NO; 

     mapScrollView.bouncesZoom = NO; 

     mapScrollView.minimumZoomScale = .5; 

     mapScrollView.maximumZoomScale = 1.5; 

     [mapScrollView setZoomScale:mapScrollView.minimumZoomScale]; 

     UIImage *mapImage = [UIImage imageNamed:[map_List objectAtIndex:mapNum]]; 
     mapImageView = [[UIImageView alloc] initWithImage: mapImage]; 
     [mapImage release]; 

     if(exScreenEnabled==1){ 
      UIImage *mapImageEx = [UIImage imageNamed:[map_List objectAtIndex:mapNum]]; 
      mapImageViewEx = [[UIImageView alloc] initWithImage: mapImageEx]; 
      [mapImageEx release]; 

      UIView *containerExViewP = (UIView*)[del.switchExVC.view viewWithTag:9000]; 
      [containerExViewP addSubview:mapImageViewEx]; 
     }else{ 
      [mapScrollView addSubview:mapImageView]; 
     } 



     [self addSubview:mapScrollView]; 

     mapImageView.userInteractionEnabled = YES; 



     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; 
} 
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ 
    if(exScreenEnabled==1){ 
     return mapImageViewEx; 
    }else{ 
     return mapImageView; 
    } 
} 

(К сожалению у меня не было никакой удачи, получая, что отформатирован, чтобы смотреть прямо на этом сайте)

Если видеокабель подключен к iPad, на iPad нет изображения, которое я хочу. Изображение на внешнем экране правильно масштабируется, когда вы делаете жест на iPad, но я не могу понять, как его прокручивать. Заранее спасибо.

изменения: теперь у меня есть это -

@implementation MapVC 

UIScrollView *mapScrollView; 

UIImageView *mapImageView; 
UIImageView *mapImageViewEx; 

CGFloat lastScale = 0; 

NSMutableArray *map_List; 

int touchesNum = 0; 

-(void)touchesBegan:(NSSet *)theTouches withEvent:(UIEvent *)event { 
    NSSet *touches = [event allTouches]; 
    touchesNum=[touches count]; 
    NSLog(@"number of touches %i", touchesNum); 
} 


- (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.png"]; 
     [map_List addObject:@"Atlantic_Map.png"]; 


     CGRect mapScrollViewFrame = CGRectMake(0, 0, 1024, 768); 

     mapScrollView = [[UIScrollView alloc] initWithFrame:mapScrollViewFrame]; 

     mapScrollView.backgroundColor = [UIColor blackColor]; 

     [mapScrollView setDelegate:(id<UIScrollViewDelegate>)self]; 

     mapScrollView.contentSize = CGSizeMake(2437, 1536); 

     mapScrollView.bounces = NO; 

     mapScrollView.bouncesZoom = NO; 

     mapScrollView.minimumZoomScale = .5; 

     mapScrollView.maximumZoomScale = 1.5; 

     [mapScrollView setZoomScale:mapScrollView.minimumZoomScale]; 

     UIImage *mapImage = [UIImage imageNamed:[map_List objectAtIndex:mapNum]]; 
     mapImageView = [[UIImageView alloc] initWithImage: mapImage]; 
     [mapImage release]; 

     if(exScreenEnabled==1){ 
      UIImage *mapImageEx = [UIImage imageNamed:[map_List objectAtIndex:mapNum]]; 
      mapImageViewEx = [[UIImageView alloc] initWithImage: mapImageEx]; 
      [mapImageEx release]; 

      UIView *containerExViewP = (UIView*)[del.switchExVC.view viewWithTag:9000]; 
      [containerExViewP addSubview:mapImageViewEx]; 
     }else{ 
      [mapScrollView addSubview:mapImageView]; 
     } 



     [self addSubview:mapScrollView]; 

     mapImageView.userInteractionEnabled = YES; 



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

     mapScrollView.multipleTouchEnabled = YES; 
    } 
    return self; 
} 


- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ 
    if(exScreenEnabled==1){ 
     return mapImageViewEx; 
    }else{ 
     return mapImageView; 
    } 
} 

- (void)scrollViewDidScroll:(UIScrollView *)inscrollView{ 
    if(touchesNum==0){ 
     CGPoint p = mapScrollView.contentOffset; 
     mapImageViewEx.frame = CGRectMake((p.x*-1), (p.y*-1), mapImageViewEx.frame.size.width, mapImageViewEx.frame.size.height); 
    } 
} 



- (void)dealloc { 

    [mapScrollView release]; 
    [mapImageView release]; 

    [map_List release]; 


    [super dealloc]; 
} 

@end 

Как я уже говорил ниже, я могу теперь получить либо свиток или масштабирование работать отдельно, но масштабирование будет все перепутано, если скроллинг работает, потому что, когда масштабирование, это думает, что это также прокрутка. Поэтому я хочу избежать прокрутки при масштабировании, и для этого хочу определить количество касаний, которые я должен делать неправильно!

+0

Хм, мне, возможно, повезло с использованием смещения содержимого http://forums.macrumors.com/showthread.php?t=568315 и установки этих координат на изображение на другом экране. – VagueExplanation

+0

Я бы попросил прокрутить ее с помощью scrollViewDidScroll и передать координаты на внешний экран. Проблема в том, что я не могу одновременно работать как с масштабированием, так и с прокруткой, потому что это вызовет увеличение масштаба. Решение, о котором я думал, заключалось в том, чтобы обнаружить, сколько касаний происходит, но прикосновения начались, даже не показывают ничего в NSLog..grr – VagueExplanation

ответ

1

Получил его работу с изображением на iPad и внешнем экране. Я, вероятно, поменю его на прямоугольную область, потому что изображение является ресурсом, тяжелым для iPad и внешнего экрана.

#import "exGlobal.h" 

#import "mapVC.h" 

#import "switchVC.h" 
#import "switchExVC.h" 
#import "mainMenuAppDelegate.h" 


#import <MobileCoreServices/MobileCoreServices.h> 

@implementation MapVC 

UIScrollView *mapScrollView; 

UIImageView *mapImageView; 
UIImageView *mapImageViewEx; 

CGFloat lastScale = 0; 

NSMutableArray *map_List; 

static int toggleScroll = 1; 


- (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.png"]; 
     [map_List addObject:@"Atlantic_Map.png"]; 


     CGRect mapScrollViewFrame = CGRectMake(0, 0, 1024, 768); 

     mapScrollView = [[UIScrollView alloc] initWithFrame:mapScrollViewFrame]; 

     mapScrollView.backgroundColor = [UIColor blackColor]; 

     [mapScrollView setDelegate:(id<UIScrollViewDelegate>)self]; 

     mapScrollView.contentSize = CGSizeMake(2437, 1536); 

     mapScrollView.bounces = NO; 

     mapScrollView.bouncesZoom = NO; 

     mapScrollView.minimumZoomScale = .5; 

     mapScrollView.maximumZoomScale = 1.5; 

     [mapScrollView setZoomScale:mapScrollView.minimumZoomScale]; 

     UIImage *mapImage = [UIImage imageNamed:[map_List objectAtIndex:mapNum]]; 
     mapImageView = [[UIImageView alloc] initWithImage: mapImage]; 
     [mapImage release]; 

     if(exScreenEnabled==1){ 
      UIImage *mapImageEx = [UIImage imageNamed:[map_List objectAtIndex:mapNum]]; 
      mapImageViewEx = [[UIImageView alloc] initWithImage: mapImageEx]; 
      [mapImageEx release]; 

      UIView *containerExViewP = (UIView*)[del.switchExVC.view viewWithTag:9000]; 
      [containerExViewP addSubview:mapImageViewEx]; 
      [mapScrollView addSubview:mapImageView]; // see if this works ok on iPad. Map on TV AND iPad. 
     }else{ 
      [mapScrollView addSubview:mapImageView]; 
     } 

     [self addSubview:mapScrollView]; 

     mapImageView.userInteractionEnabled = YES; 


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

     mapScrollView.multipleTouchEnabled = YES; 
    } 
    return self; 
} 


- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ 
    return mapImageView; 
} 

-(void)scrollViewDidZoom:(UIScrollView *)scrollView { 
    if(exScreenEnabled==1){ 
     CGPoint p = mapScrollView.contentOffset; 
     mapImageViewEx.frame = CGRectMake((p.x*-1), (p.y*-1), mapImageView.frame.size.width, mapImageView.frame.size.height); 
    } 
} 

- (void)scrollViewDidScroll:(UIScrollView *)inscrollView{ 
    if(exScreenEnabled==1 && toggleScroll==1){ 
     CGPoint p = mapScrollView.contentOffset; 
     mapImageViewEx.frame = CGRectMake((p.x*-1), (p.y*-1), mapImageView.frame.size.width, mapImageView.frame.size.height); 

    } 
} 

- (void)scrollViewWillBeginZooming:(UIScrollView *)theScrollView withView:(UIView *)view{ 
    NSLog(@"BEGIN ZOOMING"); 
    toggleScroll=0; 
} 

- (void)scrollViewDidEndZooming:(UIScrollView *)theScrollView withView:(UIView *)view atScale:(float)scale{ 
    NSLog(@"END ZOOMING"); 
    toggleScroll=1; 
} 




- (void)dealloc { 

    [mapScrollView release]; 
    [mapImageView release]; 

    [map_List release]; 

    [super dealloc]; 
} 

@end 

Я нажал пробел (4) раз для кода, а NOPE не работает, переполнение стека все еще сломан. :)

+1

Вы должны поставить 4 пробела перед строкой _every_. Но гораздо проще просто выделить код и нажать кнопку '{}'. – Anna

+0

Спасибо, я буду искать {} кнопку в следующий раз. – VagueExplanation