Objective-C:支持ARC的iOS Photo Viewer?

时间:2011-12-01 19:32:52

标签: objective-c ios cocoa-touch automatic-ref-counting

最近几天我尝试在Xcode 4.2中的iOS 5.0应用程序中实现Photo Viewer。按项目运行自动引用计数(ARC)。我已经尝试了Three20 Photo Viewer但是它有很多依赖关系,并且在我的项目中包含的内容真的很重要。接下来我尝试EGOPhotoViewer这对我来说似乎是一个很好的解决方案 - 但遗憾的是我不支持ARC,因此我无法在我的项目中编译它。

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

3 个答案:

答案 0 :(得分:15)

您可能需要查看MWPhotoBrowser - 您可以将其作为静态库添加到项目中,该库将独立于项目的ARC设置。

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

MWPhotoBrowser Screenshots

答案 1 :(得分:12)

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

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

答案 2 :(得分: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];
}