【问题标题】:TTPhotoViewController: deactivate gallery auto zoomTTPhotoViewController:停用画廊自动缩放
【发布时间】:2011-01-24 17:35:18
【问题描述】:

在我的项目中,我使用 Facebook API “three20”:https://github.com/facebook/three20/

现在,我需要自定义 TTPhotoViewController。 在画廊中,有一个“自动缩放”。始终使用完整的宽度和高度:

缺点是看不到完整的照片,重要信息可能会被剪掉/裁剪。

如何禁用自动缩放?

谢谢!


2011 年 3 月 3 日编辑:

Roman 的回答似乎不错,但不幸的是它对我没有帮助。是的,内容模式UIViewContentModeScaleAspectFill就是问题所在:

缩放内容以填充 风景。部分内容 可能会被剪裁以填充视图的 界限。

但是没有其他内容模式可以解决我的问题。我想,我必须深入到three20内部并自己缩放图像。但我需要你的帮助才能做到这一点!所以,我今天(03/03/2011)开始新的“赏金”...

非常感谢!!


2011 年 3 月 7 日编辑:

终于明白了!! roman的回答是对的,我得用UIViewContentModeScaleAspectFit

问题是:我在Photo-Object 中使用了错误的大小! 320x480 对我有用:

NSMutableArray *photos = [NSMutableArray new];

for (Information *info in allImages) {
    NSString *binaryId = info.binary;

    NSString *fileName = [NSString stringWithFormat:@"documents://img/%@.jpg", binaryId];

    Photo *photo = [[[Photo alloc] initWithCaption:info.name 
                                              urlLarge:fileName 
                                              urlSmall:fileName 
                                              urlThumb:fileName 
                                              size:CGSizeMake(320, 480)] autorelease];

    [photos addObject:photo];

}

self.photoSource = [[PhotoSet alloc] initWithTitle:@"Photos" photos:photos];

【问题讨论】:

    标签: iphone objective-c ios three20 ttphotoviewcontroller


    【解决方案1】:

    最简单的方法是破解 TTPhotoView - 在第 135 行(函数 setImage)更改

    self.contentMode = UIViewContentModeScaleAspectFill;
    

    self.contentMode = UIViewContentModeScaleAspectFit;
    

    遗憾的是,目前似乎没有其他方式。

    【讨论】:

    • 非常感谢您的回答!我现在有一个新问题:如果图像比屏幕小,它就不再增加了。图像的所有边都保持黑色,小图像在中间。
    • 在这种情况下,您必须多破解 setImage 并根据图像大小使用不同的 contentMode
    • Roman,我的目的没有 contentMode,所以我不能根据图像大小使用不同的 contentMode。 “...Fill”裁剪图像,“...Fit”不会缩放小图像。我描述的问题没有 contentMode 。我想我必须选择一种不同的方式并自己缩放(增加/减少)图像。你能帮我吗?
    【解决方案2】:

    您应该将您的问题授予 roman,因为他回答了您的具体问题,但我想建议您考虑不使用 three20 并自己实现图像滚动条。观看 iTunes 上 WWDC 2010 会议视频中的 Session 104, Designing Apps with Scroll Views(需要 ADC 登录)。它会引导您准确了解如何实现这种类型的接口,并允许您保持应用精简,而无需将整个 three20 库添加到您的代码中。

    【讨论】:

    • “你应该把你的问题交给 roman”我在 roman 的回答之后的很多周内添加了赏金,因为我希望我能得到一个更详细的解决方案
    【解决方案3】:

    TTScrollView 类中进行此更改

    在方法中

    - (CGRect)frameOfPageAtIndex:(NSInteger)pageIndex 
    

    在此方法中,更改以下行

    if (size.width > size.height) { 
    

    if (size.width / size.height > self.width / self.height) { 
    

    这对我有用。

    【讨论】:

    • 感谢您的回答!你用的是哪个版本的three20?我在“frameOfPageAtIndex”方法中找不到“if (size.width > size.height)”行。请给我当前版本的行号:github.com/facebook/three20/blob/master/src/Three20UI/Sources/…
    • 抱歉没有检查最新的代码。猜猜更改最终被合并(当我使用库时不存在)。这应该可以解决您面临的问题(至少为我做了)
    • 不幸的是,three20 的行为与我上面描述的完全一样。整个屏幕总是被填满,所以很长的图像被切掉了一块。该行为正是 UIViewContentModeScaleAspectFill 属性。您能否检查一下 UIViewContentModeScaleAspectFill 是否也在您的旧版本中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多