1

私がやろうとしていたのは、UIImageViewを暗くして、画像の上にあるボタンとビューが表示されるようにすることでした。ios6でユーザーがFacebookを使って共有するときに与えられる効果を与えたかったのです。その背後にあるすべてのコンテンツは暗くなりますが、表示されます。私は使ってみました:

    UIImage *maskedImage = [self darkenImage:image toLevel:0.5];

- (UIImage *)darkenImage:(UIImage *)image toLevel:(CGFloat)level
{
// Create a temporary view to act as a darkening layer
CGRect frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
UIView *tempView = [[UIView alloc] initWithFrame:frame];
tempView.backgroundColor = [UIColor blackColor];
tempView.alpha = level;

// Draw the image into a new graphics context
UIGraphicsBeginImageContext(frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[image drawInRect:frame];

// Flip the context vertically so we can draw the dark layer via a mask that
// aligns with the image's alpha pixels (Quartz uses flipped coordinates)
CGContextTranslateCTM(context, 0, frame.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextClipToMask(context, frame, image.CGImage);
[tempView.layer renderInContext:context];

// Produce a new image from this context
CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage *toReturn = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
UIGraphicsEndImageContext();
return toReturn;
}

しかし、それは私が望む効果を与えません。色が変わりますが、iOS facebook共有を使用するときのように、暗くしたいだけで、背景が暗くなります。これは可能ですか?

4

1 に答える 1

8

UIViewとそのすべてのコンテンツおよびサブビューを暗くするには、その上に、すべて黒でアルファ透明度のある別のUIViewを描画するだけです。これにより、この「シールドビュー」の黒色が下のビューのコンテンツと混ざり合います。アルファ透明度が0.5の場合、以下のすべてが50%暗くなったように見えます。

フェード効果を得るには、「シールドビュー」のトランジションを使用するだけです。

// Make the view 100% transparent before you put it into your view hierarchy.
[myView setAlpha:0];

// Layout the view to shield all the content you want to darken.
// Give it the correct size & position and make sure is "higher" in the view
// hierarchy than your other content.
...code goes here...

// Now fade the view from 100% alpha to 50% alpha:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[myView setAlpha:0.5];
[UIView commitAnimations];

アニメーションの長さを変更して、必要に応じてフェードを遅くしたり速くしたりできます。アニメーションの長さを設定しない場合は、デフォルトの長さが使用されます(これは、Facebookで共有している場合です)。

于 2013-01-21T00:19:29.760 に答える