最近在使用Three20库进行开发,并使用了TTPhotoViewController 来显示照片,不清楚大家是否遇到过我这样的问题:直接TTPhotoViewController ,使用在竖屏的时候,图片显示是错误了,此时图片上自动放大,且经常会显示到其他页的图片;而在横屏的情况下是正确的。
参考了网上一些解决方法:将TTPhotoView.m的- (void)setImage:(UIImage*)image函数中的UIViewContentModeScaleAspectFill改为UIViewContentModeScaleAspectFit,依照该方法修改后,此时发现竖屏是正确的,但是横屏确显示的是小图,无法满屏显示。
由此得出,在不同的interfaceOrientation下,需设置不同的contentmode。因此经过实验,修改代码如下:
TTPhotoViewController .m
增加函数:updatePhotoViewContentMode:(UIInterfaceOrientation)interfaceOrientation
///
- (void)updatePhotoViewContentMode:(UIInterfaceOrientation)interfaceOrientation
{
TTPhotoView* centerPhotoView = self.centerPhotoView;
UIViewContentMode currentContentMode;
if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
currentContentMode = UIViewContentModeScaleAspectFill;
}
else{
currentContentMode = UIViewContentModeScaleAspectFit;
}
//先设置非当前view到contentMode,防止旋转时,会看到非centerPhotoview
for (TTPhotoView* photoView in _scrollView.visiblePages.objectEnumerator) {
if (centerPhotoView == photoView)
break;
photoView.contentMode = currentContentMode;
}
centerPhotoView.contentMode = currentContentMode;
}
修改代码:
///
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration {
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self updateToolbarWithOrientation:toInterfaceOrientation];
[self updatePhotoViewContentMode:toInterfaceOrientation];
}
///
- (void)loadImages {
TTPhotoView* centerPhotoView = self.centerPhotoView;
for (TTPhotoView* photoView in _scrollView.visiblePages.objectEnumerator) {
if (photoView == centerPhotoView) {
[photoView loadPreview:NO];
} else {
[photoView loadPreview:YES];
}
//修改interfaceOrientation
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){
photoView.contentMode = UIViewContentModeScaleAspectFill;
}
else{
photoView.contentMode = UIViewContentModeScaleAspectFit;
}
}
if (_delayLoad) {
_delayLoad = NO;
[self startImageLoadTimer:kPhotoLoadLongDelay];
} else {
[centerPhotoView loadImage];
}
}