1

ポップオーバーを表示するときに、ぼやけた背景を作成しようとしています。ほとんど機能するようになりました。

私はC#に翻訳したObjectiveCを見つけました。

問題はこの行にあります

UIImage finalImage = new UIImage(resultImage);

それが私が間違っていることだといいのですが

    private UIView CreateBlurView(UIView view)
    {
        UIGraphics.BeginImageContext(view.Bounds.Size);
        view.Layer.RenderInContext(UIGraphics.GetCurrentContext());
        UIImage viewImage = UIGraphics.GetImageFromCurrentImageContext();

        // Blur Image
        CIImage imageToBlur = CIImage.FromCGImage(viewImage.CGImage);
        CIFilter gaussianBlurFilter = CIFilter.FromName("CIGaussianBlur");
        gaussianBlurFilter.SetValueForKey(imageToBlur,new NSString("inputImage"));
        gaussianBlurFilter.SetValueForKey(new NSNumber(10.0f),new NSString("inputRadius"));
        CIImage resultImage = (CIImage) gaussianBlurFilter.ValueForKey(new NSString("outputImage"));

        UIImage finalImage = new UIImage(resultImage);
        UIImageView  imageView = new UIImageView(view.Bounds);
        imageView.Image = finalImage;
        return imageView;
    }
4

1 に答える 1

3

まず、iOS 6 (またはそれ以降) を使用していることを確認してくださいCIGaussianBlur。そのバージョンより前の iOS では使用できませんでした。

次に、(元のコードから) 次の行がありません。

UIGraphicsEndImageContext();

C#/MonoTouch では次のようになります。

MonoTouch.UIKit.UIGraphics.EndImageContext ();

最後に、バグに遭遇しました:(

-[UIImage initWithCIImage]: unrecognized selector sent to instance 0x168f2280

:セレクターの最後にaがありません。現在、 a (スケール) および aCIImageと共に aを受け入れる別の .ctor があります。これは正しく動作するはずです。floatUIImageOrientation

完全なソースは次のようになります。

private UIView CreateBlurView(UIView view)
{
    UIGraphics.BeginImageContext(view.Bounds.Size);
    view.Layer.RenderInContext(UIGraphics.GetCurrentContext());
    UIImage viewImage = UIGraphics.GetImageFromCurrentImageContext();
    UIGraphics.EndImageContext ();

    // Blur Image
    CIImage imageToBlur = CIImage.FromCGImage(viewImage.CGImage);
    CIFilter gaussianBlurFilter = CIFilter.FromName("CIGaussianBlur");
    gaussianBlurFilter.SetValueForKey(imageToBlur,new NSString("inputImage"));
    gaussianBlurFilter.SetValueForKey(new NSNumber(10.0f),new NSString("inputRadius"));
    CIImage resultImage = (CIImage) gaussianBlurFilter.ValueForKey(new NSString("outputImage"));

    UIImage finalImage = new UIImage(resultImage, 1.0f, UIImageOrientation.Up);
    UIImageView  imageView = new UIImageView(view.Bounds);
    imageView.Image = finalImage;
}

注: このタイプミスは MonoTouch で修正されており、コンストラクターは将来のリリース (6.0.9 以降) で使用できるようになります。

于 2012-12-07T01:59:21.557 に答える