踏み台(ホーム画面)のアイコンとほぼ同じように、UIImageViewに触れたときに暗くする必要があります。
0.5アルファと黒の背景を持つUIViewを追加する必要があります。これは不器用なようです。レイヤーか何か(CALayers)を使用する必要があります。
踏み台(ホーム画面)のアイコンとほぼ同じように、UIImageViewに触れたときに暗くする必要があります。
0.5アルファと黒の背景を持つUIViewを追加する必要があります。これは不器用なようです。レイヤーか何か(CALayers)を使用する必要があります。
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;
}
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のようにもう少し作業が必要になります。
UIImageViewは複数の画像を持つことができます。画像の2つのバージョンを用意し、必要に応じて暗いバージョンに切り替えることができます。