2016-03-31 5 views
0

私はいくつかのイベントを示す迅速なアプリケーションに取り組んでいます。各イベントには制限時間があり、その後イベントの有効期限が切れます。グレイ全体のスケーリング

は、溶液上の
  1. マスクビュー

     if let maskImage = UIImage(named: "MaskImage"){ 
         myView.maskView = UIImageView(image: maskImage) 
        } 
    

私から働いていない:

は、私はのようなものを試しているのイベント満了後のイベント画面のグレースケールを作りたいですイベント画面にもカラー画像が含まれているため、

  • 再帰的には、すべてのsubviewsをフェッチし、それらbackgroundColorを設定しようとしたがないが、より白色

  • フェード示し全てsubViewsalpha値を変更

  • 働いクエリ:私のイベント画面には、カラフルなイメージとカラフルなラベルが多数ありますが、どのようにこれらをすべてグレースケールで作成できますか?

    ご協力いただければ幸いです。私はビュー全体にわたり、このようなグレースケールの効果を達成したいくつかの研究の後

  • +0

    私はよく分かりませんが、ウィンドウのトップレイヤーで、アルファ0.8のグレーの色でビューを作成するのはどうですか?ビューの下にあるすべてのUI要素は、グレースケールにする必要があります。 – derdida

    +0

    これを実行した後、コントローラーは対話式オブジェクトになりますか?そのような場合でも、イメージの色は何とか見ることができますが、ユーザーがグレイアウトされたビューとやりとりすることができれば試してみます。 –

    +0

    いいえ、UIの対話は無効にされます – derdida

    答えて

    0

    :上記の方法ここでは

    /** 
        To convert an image to grayscale 
    
        - parameter image: The UIImage to be converted 
    
        - returns: The UIImage after conversion 
        */ 
        static func convertToGrayScale(_ image: UIImage?) -> UIImage? { 
         if image == nil { 
          return nil 
         } 
         let imageRect:CGRect = CGRect(x: 0, y: 0, width: image!.size.width, height: image!.size.height) 
         let colorSpace = CGColorSpaceCreateDeviceGray() 
         let width = image!.size.width 
         let height = image!.size.height 
    
         let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.none.rawValue) 
         let context = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue) 
    
         context?.draw(image!.cgImage!, in: imageRect) 
         let imageRef = context?.makeImage() 
         let newImage = UIImage(cgImage: imageRef!) 
    
         return newImage 
        } 
    

    が提示ビュー内のすべてのカラー画像のために働くだろうと同じことがmyView.maskView = UIImageView(image: maskImage)のために使用することができます。

    この

    はあなたの全体のビューをグレースケールになり、グレースケールのみのラベルとテキストながら、私はこれを使用:上記の方法

    // Convert to grayscale 
        func convertToGrayScaleColor() -> UIColor? { 
         if self == UIColor.clear { 
          return UIColor.clear 
         } 
         var fRed : CGFloat = 0 
         var fGreen : CGFloat = 0 
         var fBlue : CGFloat = 0 
         var fAlpha: CGFloat = 0 
         if self.getRed(&fRed, green: &fGreen, blue: &fBlue, alpha: &fAlpha) { 
          if fRed == 0 && fGreen == 0 && fBlue == 0{ 
           return UIColor.gray 
          }else{ 
           let grayScaleColor = (fRed + fGreen + fBlue)/3 
           return UIColor(red: grayScaleColor, green: grayScaleColor, blue: grayScaleColor, alpha: fAlpha) 
          } 
         } else { 
          print("Could not extract RGBA components, so rolling back to default UIColor.grayColor()") 
          return UIColor.gray 
         } 
        } 
    

    は一部extension UIColorです。上記のコードはxcodeを使用してSwift 3.0に書かれています。

    答えに何か不安がある場合や混乱している場合は、自由にコメントを残してください。