2011-02-08 66 views
1

嘿。我已經取得了讓與變焦的綱領性UIScrollView的,但現在我一直在努力,如果插入採取滾動/縮放圖像發送到外部屏幕。在連接到iPad的外部屏幕上滾動UIScrollView

@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 2011-02-08 00:04:20

+0

我現在用scrollViewDidScroll使其滾動,並將座標傳遞給外部屏幕。問題是,我無法同時進行縮放和滾動工作,因爲這會導致縮放問題。我想到了一個解決方案是,以檢測有多少觸動正在發生,但倒是開始甚至沒有顯示任何NSLog..grr – VagueExplanation 2011-02-08 02:05:35

回答

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不起作用仍然破壞堆棧溢出。 :)