14

私は地図を持っています。地図上に、ぼやけた小さな円を描きたいと思います。私はこのようなものを実装しました:

UIVisualEffect *visualEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
self.visualEffectView = [[UIVisualEffectView alloc] initWithEffect:visualEffect];
[self addSubview:self.visualEffectView];

そして次にlayoutSubviews

[self.visualEffectView setFrame:CGRectMake(0.f, 0.f, 20.f, 20.f];

問題は、このビューを丸くすることです。私はもう試した:

[self.visualEffectView.layer setCornerRadius:10.f];

しかし、何も起こりません。別の試みは( SOFの質問に基づいて)でした:

CAShapeLayer *mask = [CAShapeLayer layer];
mask.path = [UIBezierPath bezierPathWithOvalInRect:self.visualEffectView.bounds].CGPath;
self.visualEffectView.layer.mask = mask;

しかし、この場合、visualEffectViewは丸みを帯びていますが、ぼやけていません:/. それを機能させる方法はありますか?

ところで: 試してみましたがFXBlurView、動作が非常に遅く、iPhone 5 でマップ + ブラーのみを 1 分間ロードするアプリを受け入れることができません。

4

6 に答える 6

33

試してみる:

self.visualEffectView.clipsToBounds = YES;

これは、cornerRadius を設定した後に配置します。これでいいはずです。BezierPath は省略できます。お役に立てれば :)

編集

私は自分のプロジェクトで似たようなことを試しました。丸い角でぼかしを維持する良い方法は、視覚効果ビューと同じフレームを持つ新しいビューの子として単純に視覚効果ビューを配置することです。この新しい親UIViewオブジェクトの角の半径を設定し、そのclipsToBoundsプロパティを に設定するだけYESです。次に、境界にクリップするときに、サブビューに角の半径を自動的に与えます。

試してみてください、私の場合はうまくいきます。

于 2015-03-01T20:03:05.037 に答える
-2

まあ、通常のUIViewと同じように角を丸くする可能性があります。ただし、UIVisualEffectView円の湾曲した「側面」の近くの領域が適切にぼやけていないため、見栄えがよくありません。バグがあって醜いので、 round はお勧めしませんUIVisualEffectView

于 2015-03-13T09:13:02.533 に答える