2011-02-08 58 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不起作用仍然破坏堆栈溢出。 :)