2011-12-01 56 views
7

最近几天我试着在Xcode 4.2的iOS 5.0应用程序中实现照片查看器。项目正在运行自动引用计数(ARC)。我试过Three20 Photo Viewer,但是这有很大的依赖性,并且真的是一个沉重的部分,包括在我的项目中。接下来我尝试了EGOPhotoViewer,这对我的目的来说确实是一个很好的解决方案 - 但遗憾的是我不支持ARC,因此我无法在我的项目中编译它。Objective-C:支持ARC的iOS图片浏览器?

是否有人知道支持ARC的iOS照片查看器 - 或者可以以某种方式将其作为库添加到使用ARC运行的项目中?

回答

12

可以通过将-fno-objc-arc添加到文件来禁用单个文件的ARC。

要禁用ARC的文件在Xcode 4中选择项目,转到构建阶段选项卡中,选择要禁用ARC文件中,-fno-objc弧编译器标志添加到这些文件。

+0

想你!这真的拯救了我的一天。 – dhrm

15

你可能想看看MWPhotoBrowser - 你可以将它作为一个静态库添加到你的项目中,它将独立于你的项目的ARC设置。

MWPhotoBrowser可以通过提供UIImage对象或URL到文件,Web图像或库资源来显示一个或多个图像。照片浏览器可以无缝地从网上下载和缓存照片。可以缩放和平移照片,并可以显示可选(可定制)的标题。浏览器也可用于允许用户使用网格或主图像视图选择一张或多张照片。

MWPhotoBrowser Screenshots

+0

它看起来非常有用。目前我正在为我的项目使用EGOPhotoViewer。与EGOPhotoViewer相比,您知道浏览器的优势吗? – dhrm

+0

有一点;你应该更容易添加对多种语言的支持。 – dhrm

+1

谢谢!我只是快速浏览了EGOPhotoViewer,但我认为它们非常相似。我试图让自己变得非常干净,易于使用和优化;如果你有时间玩一玩!感谢多种语言的建议。只有几个字符串会受到影响,所以它不应该很难。我会研究它! –

0

我是这样做的:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    self.startX = scrollView.contentOffset.x; 
} 

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    //NSLog(@"scrollViewDidEndDragging"); 
    self.endX = scrollView.contentOffset.x; 

    self.photoIdx = (int)self.startX/Normalize(1160); 

    if (decelerate == FALSE) 
    { 
    int intoThePhoto = (int)self.photoScrollView.contentOffset.x % Normalize(1160); 

    if (intoThePhoto < Normalize(1060/2)) 
     [scrollView setContentOffset:CGPointMake(Normalize(1160)*self.photoIdx,0) animated:YES]; 
    else 
     [scrollView setContentOffset:CGPointMake(Normalize(1160)*(self.photoIdx+1),0) animated:YES]; 

    } 

} 

-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{ 

    if ((self.endX - self.startX) > 0 && self.photoIdx < ([self.photos count] -1)) 
    [scrollView setContentOffset:CGPointMake(Normalize(1160)*(self.photoIdx+1),0) animated:YES]; 
    else if ((self.endX - self.startX) < 0 && self.photoIdx != 0) 
    [scrollView setContentOffset:CGPointMake(Normalize(1160)*(self.photoIdx-1),0) animated:YES]; 
}