2011-12-01 57 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]; 
}