2016-04-29 2 views
0

私はこのhttps://www.raywenderlich.com/79149/grand-central-dispatch-tutorial-swift-part-1からGCDチュートリアルを読んでいます。私が始めたプロジェクトをダウンロードして、ビルドするCIFeatureにはメンバーがありませんhasLeftEyePosition

、私はいくつかのエラーました:この行faceFeature.hasLeftEyePosition

private extension PhotoDetailViewController { 
    func faceOverlayImageFromImage(image: UIImage) -> UIImage { 
    let detector = CIDetector(ofType: CIDetectorTypeFace, 
        context: nil, 
        options: [CIDetectorAccuracy: CIDetectorAccuracyHigh]) 

    // Get features from the image 
    let newImage = CIImage(CGImage: image.CGImage!) 
    let features = detector.featuresInImage(newImage) 

    UIGraphicsBeginImageContext(image.size) 
    let imageRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height) 

    // Draws this in the upper left coordinate system 
    image.drawInRect(imageRect, blendMode: CGBlendMode.Normal, alpha: 1.0) 

    let context = UIGraphicsGetCurrentContext() 
    for faceFeature in features { 
     let faceRect = faceFeature.bounds 
     CGContextSaveGState(context) 

     // CI and CG work in different coordinate systems, we should translate to 
     // the correct one so we don't get mixed up when calculating the face position. 
     CGContextTranslateCTM(context, 0.0, imageRect.size.height) 
     CGContextScaleCTM(context, 1.0, -1.0) 

     if faceFeature.hasLeftEyePosition { 
     let leftEyePosition = faceFeature.leftEyePosition 
     let eyeWidth = faceRect.size.width/FaceBoundsToEyeScaleFactor 
     let eyeHeight = faceRect.size.height/FaceBoundsToEyeScaleFactor 
     let eyeRect = CGRect(x: leftEyePosition.x - eyeWidth/2.0, 
      y: leftEyePosition.y - eyeHeight/2.0, 
      width: eyeWidth, 
      height: eyeHeight) 
     drawEyeBallForFrame(eyeRect) 
     } 

     if faceFeature.hasRightEyePosition { 
     let leftEyePosition = faceFeature.rightEyePosition 
     let eyeWidth = faceRect.size.width/FaceBoundsToEyeScaleFactor 
     let eyeHeight = faceRect.size.height/FaceBoundsToEyeScaleFactor 
     let eyeRect = CGRect(x: leftEyePosition.x - eyeWidth/2.0, 
      y: leftEyePosition.y - eyeHeight/2.0, 
      width: eyeWidth, 
      height: eyeHeight) 
     drawEyeBallForFrame(eyeRect) 
     } 

     CGContextRestoreGState(context); 
    } 

    let overlayImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return overlayImage 
    } 

を、それは言う:

Value of type 'CIFeature' has no member 'hasLeftEyePosition'

これを解決するために、どのように。

いずれかが認識されるであろうことができます。ありがとう。

+0

のみ[ 'CIFaceFeature'](HTTPSを:あなたがクラッシュしたことがないことを確認したい場合は、あなたがそれを守る代わりに、入力画像を返すことができます(場合には、誰かが何か他のものに「顔」からCIDetectorTypeに変更します): //developer.apple.com/library/ios/documentation/CoreImage/Reference/CIFaceFeature/index.html#//apple_ref/occ/cl/CIFaceFeature)にはこのようなプロパティがあります。あなたはそれをキャストする必要があります。 – HAS

答えて

1

私がちょうどあなたが参照したプロジェクトをダウンロードしました。それは私のために働いています(それを最新のSwiftバージョンに更新した後)。

let features = detector.featuresInImage(newImage) 

は、これは私が力鋳造に強く思い

let features = detector.featuresInImage(newImage) as! [CIFaceFeature] 

でなければならないが、これ以降ではない:

あなたが不足している重要な部分は、あなたがfeaturesを設定し、あなたの9行目にありますプロダクションアプリは大丈夫です。

guard let features = detector.featuresInImage(newImage) as? [CIFaceFeature] else { return image } 
+0

が機能しませんでした。私があなたのように変わったとき、それは '宣言されていない識別子 'Utils''の使用を示しています。 – Khuong

+1

はい、動作します。それは別の問題です。 'Utils'を' NSObject'から継承させる必要があります。 – HAS

+0

はい。今それは働く。ありがとう;) – Khuong

関連する問題