2016-05-18 8 views
0
func viewPhotoDetalController(index: Int) -> PhotoDetailViewController? { 
    if let storyboard = storyboard, 
     detailController = storyboard.instantiateViewControllerWithIdentifier("PhotoDetail") 
      as? PhotoDetailViewController { 
     //loadPhoto() 
     return detailController 
    } 
    return nil 
} 

スワイプを左または右UIPageViewControllerに上記のコードが呼び出されたときに、 前に私は写真をロードし、このIOS UIPageViewControllerにイメージをロードする方法

func loadPhoto (index:Int) { 
    let imgManager = PHCachingImageManager() 

    imgManager.requestImageForAsset(self.devicePhotosAsset[self.index] as! PHAsset, targetSize: PHImageManagerMaximumSize, contentMode: .AspectFit, options: nil, resultHandler: {(result, info) -> Void in 
      // set the detailController's photo here 

     }) 

} 
ようdetailControllerの写真の変数を設定したいdetailControllerを返します

ですが、問題はrequestImageForAssetです。これは、非同期APIで、写真がロードされた時点でdetailControllerが返されます。またrequestImageForAsset APIの戻り値の型がvoidであれば、私はどのように私はdetailControllerの写真の変数を設定することができますので、

imgManager.requestImageForAsset(self.devicePhotosAsset[self.index] as! PHAsset, targetSize: PHImageManagerMaximumSize, contentMode: .AspectFit, options: nil, resultHandler: {(result, info) -> Void in 
      detailController.photo = result 
      return detailController 

     }) 

ような何かを行うことはできませんか?ここ

はdetailControllerの完全なコードですが、私はUIScrollViewのチュートリアルhere

import UIKit 
import Photos 


class PhotoDetailViewController : UIViewController { 

@IBOutlet weak var scrollView: UIScrollView! 
@IBOutlet weak var imageViewBottomConstraint: NSLayoutConstraint! 
@IBOutlet weak var imageViewLeadingConstraint: NSLayoutConstraint! 
@IBOutlet weak var imageViewTopConstraint: NSLayoutConstraint! 
@IBOutlet weak var imageViewTrailingConstraint: NSLayoutConstraint! 

var devicePhotosAsset : PHFetchResult! 
var index = 0 
var photo : UIImage! 

@IBOutlet weak var imageView : UIImageView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.displayPhoto() 
} 

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    updateMinZoomScaleForSize(view.bounds.size) 
} 

func displayPhoto() { 
    let imgManager = PHCachingImageManager() 

    _ = imgManager.requestImageForAsset(self.devicePhotosAsset[self.index] as! PHAsset, targetSize: PHImageManagerMaximumSize, contentMode: .AspectFit, options: nil, resultHandler: {(result, info) -> Void in 
      self.imageView.image = result 

     }) 

} 

private func updateMinZoomScaleForSize(size: CGSize) { 
    let widthScale = size.width/imageView.bounds.width 
    let heightScale = size.height/imageView.bounds.height 
    let minScale = min(widthScale, heightScale) 

    scrollView.minimumZoomScale = minScale 

    scrollView.zoomScale = minScale 
} 

private func updateConstraintsForSize(size: CGSize) { 

    let yOffset = max(0, (size.height - imageView.frame.height)/2) 
    imageViewTopConstraint.constant = yOffset 
    imageViewBottomConstraint.constant = yOffset 

    let xOffset = max(0, (size.width - imageView.frame.width)/2) 
    imageViewLeadingConstraint.constant = xOffset 
    imageViewTrailingConstraint.constant = xOffset 

    view.layoutIfNeeded() 
    } 
} 

extension PhotoDetailViewController: UIScrollViewDelegate { 
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? { 
    return imageView 
} 

func scrollViewDidZoom(scrollView: UIScrollView) { 
    updateConstraintsForSize(view.bounds.size) 
} 

} 
+0

のように見えるだろう?クロージャを使用してdefined.Soであるテキスト –

答えて

0

がPho​​toDetailViewControllerにPHAssetをパスし、自分の場合はそののviewDidLoadで画像

imgManager.requestImageForAsset(phasset, targetSize: PHImageManagerMaximumSize, contentMode: .AspectFit, options: nil, resultHandler: {(result, info) -> Void in 
       self.photo = result 

      }) 

をダウンロードして電話をかけるに従います任意の問題は私に知らせてください

+0

これは動作しません、写真はページコントローラ – paynestrike

+0

に読み込まれなければなりませんなぜviewdidloadで読み込めませんか? –

+0

これは動作しますが、詳細はこちらコントローラー私は画像をズーム可能にするためにscrollViewを使用します。ここに画像をロードすると最初の写真のスケールが非常に大きくなります – paynestrike

0

クローサーが変数の定数と定数をキャプチャするようにしようとするそれはあなたが

func viewPhotoDetalController(index: Int) -> PhotoDetailViewController? { 
    if let storyboard = storyboard, 
     detailController = storyboard.instantiateViewControllerWithIdentifier("PhotoDetail") 
      as? PhotoDetailViewController { 
     loadPhoto(2, completionHandler: {[weak self] (image) in 
      detailController.imageView.image = image 
     }) 
     return detailController 
    } 
    return nil 
} 

としてあなたを解決することができますし、loadPhoto方法は、あなたがDetailViewController内の画像の読み込みロジックを実行しないのはなぜこの

func loadPhoto(index:Int,completionHandler:(image:UIImage?)->()) { 
    let imgManager = PHCachingImageManager() 

    imgManager.requestImageForAsset(self.devicePhotosAsset[self.index] as! PHAsset, targetSize: PHImageManagerMaximumSize, contentMode: .AspectFit, options: nil, resultHandler: {(result, info) -> Void in 
     completionHandler(image: result) 
    }) 
} 
関連する問題