6

私の app では、UIView単純な UIView をサブクラス化することで見通せました。しかし、 を使って同じことをしようとすると、UIVisualEffectViewできません。

これが私がノーマルを使ってできることですUIView

ここに画像の説明を入力

UIVisualEffectViewgreen の代わりにを使用すると、 asにシースルーが追加されてUIViewいても、シースルー UIView が見えません。UIViewUIVisualEffectViewsubview

ここに画像の説明を入力

コード:

- (void)drawRect:(CGRect)rect { //this is same for the UIVIew and for the UIVisualEffectView
    [super drawRect:rect];

    CGContextRef context = UIGraphicsGetCurrentContext();
    // Clear any existing drawing on this view
    // Remove this if the hole never changes on redraws of the UIView
    CGContextClearRect(context, self.bounds);

    // Create a path around the entire view
    UIBezierPath *clipPath = [UIBezierPath bezierPathWithRect:self.bounds];

    // Your transparent window. This is for reference, but set this either as a property of the class or some other way
    CGRect transparentFrame;
    // Add the transparent window
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:transparentFrame cornerRadius:5.0f];
    [clipPath appendPath:path];

    // NOTE: If you want to add more holes, simply create another UIBezierPath and call [clipPath appendPath:anotherPath];

    // This sets the algorithm used to determine what gets filled and what doesn't
    clipPath.usesEvenOddFillRule = YES;
    // Add the clipping to the graphics context
    [clipPath addClip];

    // set your color
    UIColor *tintColor = [UIColor greenColor]; 

    // (optional) set transparency alpha
    CGContextSetAlpha(context, 0.7f);
    // tell the color to be a fill color
    [tintColor setFill];
    // fill the path
    [clipPath fill];
}

質問: なぜこれが で動作しなかったのUIVisualEffectViewですか?

4

1 に答える 1