6

踏み台(ホーム画面)のアイコンとほぼ同じように、UIImageViewに触れたときに暗くする必要があります。

0.5アルファと黒の背景を持つUIViewを追加する必要があります。これは不器用なようです。レイヤーか何か(CALayers)を使用する必要があります。

4

3 に答える 3

6

UIImageViewに画像の実際の描画を処理させますが、画像を事前に暗くした画像に切り替えます。アルファが維持された暗い画像を生成するために使用したコードは次のとおりです。

+ (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();
    [tempView release];
    return toReturn;
}
于 2012-08-25T07:58:02.473 に答える
4

UIViewをサブクラス化し、UIImage ivar(画像と呼ばれる)を追加するのはどうですか?次に、-drawRectをオーバーライドできます。タッチ中に設定されたpressedというブール値のivarがある場合は、次のようになります。

- (void)drawRect:(CGRect)rect
{
[image drawAtPoint:(CGPointMake(0.0, 0.0))];

// if pressed, fill rect with dark translucent color
if (pressed)
    {
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSaveGState(ctx);
    CGContextSetRGBFillColor(ctx, 0.5, 0.5, 0.5, 0.5);
    CGContextFillRect(ctx, rect);
    CGContextRestoreGState(ctx);
    }
}

上記のRGBA値を試してみてください。そしてもちろん、非長方形の形状には、CGMutablePathRefのようにもう少し作業が必要になります。

于 2010-10-23T23:43:41.687 に答える
1

UIImageViewは複数の画像を持つことができます。画像の2つのバージョンを用意し、必要に応じて暗いバージョンに切り替えることができます。

于 2010-10-23T23:18:31.443 に答える