TTPhotoViewController 在不同interfaceOrientation下的显示问题

来源:互联网 发布:最奇葩的淘宝差评有图 编辑:程序博客网 时间:2024/05/20 05:04
 

http://blog.csdn.net/gavinming/article/details/6756769

        最近在使用Three20库进行开发,并使用了TTPhotoViewController 来显示照片,不清楚大家是否遇到过我这样的问题:直接TTPhotoViewController ,使用在竖屏的时候,图片显示是错误了,此时图片上自动放大,且经常会显示到其他页的图片;而在横屏的情况下是正确的。

        参考了网上一些解决方法:将TTPhotoView.m的- (void)setImage:(UIImage*)image函数中的UIViewContentModeScaleAspectFill改为UIViewContentModeScaleAspectFit,依照该方法修改后,此时发现竖屏是正确的,但是横屏确显示的是小图,无法满屏显示。

       由此得出,在不同的interfaceOrientation下,需设置不同的contentmode。因此经过实验,修改代码如下:

TTPhotoViewController .m

增加函数:updatePhotoViewContentMode:(UIInterfaceOrientation)interfaceOrientation

view plaincopy to clipboardprint?
  1. ///////////////////////////////////////////////////////////////////////////////////////////////////  
  2. - (void)updatePhotoViewContentMode:(UIInterfaceOrientation)interfaceOrientation  
  3. {  
  4.     TTPhotoView* centerPhotoView = self.centerPhotoView;  
  5.     UIViewContentMode currentContentMode;  
  6.     if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) {  
  7.         currentContentMode = UIViewContentModeScaleAspectFill;  
  8.     }  
  9.     else{  
  10.         currentContentMode = UIViewContentModeScaleAspectFit;  
  11.     }  
  12.     //先设置非当前view到contentMode,防止旋转时,会看到非centerPhotoview  
  13.     for (TTPhotoView* photoView in _scrollView.visiblePages.objectEnumerator) {  
  14.         if (centerPhotoView == photoView)  
  15.             break;  
  16.         photoView.contentMode = currentContentMode;  
  17.     }  
  18.     centerPhotoView.contentMode = currentContentMode;  
  19. }  

修改代码:

view plaincopy to clipboardprint?
  1. ///////////////////////////////////////////////////////////////////////////////////////////////////  
  2. - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation  
  3.                                          duration:(NSTimeInterval)duration {  
  4.   [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];  
  5.   [self updateToolbarWithOrientation:toInterfaceOrientation];  
  6.  <span style="color:#ff0000;"> </span>[self updatePhotoViewContentMode:toInterfaceOrientation];  
  7. }  

view plaincopy to clipboardprint?
  1. ///////////////////////////////////////////////////////////////////////////////////////////////////  
  2. - (void)loadImages {  
  3.   TTPhotoView* centerPhotoView = self.centerPhotoView;  
  4.   for (TTPhotoView* photoView in _scrollView.visiblePages.objectEnumerator) {  
  5.     if (photoView == centerPhotoView) {  
  6.       [photoView loadPreview:NO];  
  7.   
  8.     } else {  
  9.       [photoView loadPreview:YES];  
  10.     }  
  11.     //修改interfaceOrientation   
  12.     if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){  
  13.       photoView.contentMode = UIViewContentModeScaleAspectFill;  
  14.     }  
  15.     else{  
  16.       photoView.contentMode = UIViewContentModeScaleAspectFit;  
  17.     }  
  18.   }  
  19.   
  20.   if (_delayLoad) {  
  21.     _delayLoad = NO;  
  22.     [self startImageLoadTimer:kPhotoLoadLongDelay];  
  23.   
  24.   } else {  
  25.     [centerPhotoView loadImage];  
  26.   }  
  27. }