私はUIViewサブクラスを作成したいと思っています。それは、とりわけ、その下にある色を特定の色に色付けします。これは私が作ってみたものですが、残念ながら、正しく動作していないよう:iPhoneで画面の一部をサブビューにする方法は?
#import <UIKit/UIKit.h>
@class MyOtherView;
@interface MyView : UIView
{
MyOtherView *subview;
}
@end
@implementation MyView
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
frame.origin.x += 100.0;
frame.origin.y += 100.0;
frame.size.width = frame.size.height = 200.0;
subview = [[MyOtherView alloc] initWithFrame:frame];
[self addSubview:subview];
[subview release];
}
return self;
}
- (void)drawRect:(CGRect)rect
{
// Draw a background to test out on
UIImage *image = [UIImage imageNamed:@"somepic.png"];
[image drawAtPoint:rect.origin];
const CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blueColor] setFill];
rect.size.width = rect.size.height = 200.0;
CGContextFillRect(ctx, rect);
}
@end
@interface MyOtherView : UIView
@end
@implementation MyOtherView
- (void)drawRect:(CGRect)rect
{
// This should tint "MyView" but it doesn't.
const CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextSetBlendMode(ctx, kCGBlendModeScreen);
[[UIColor redColor] setFill];
CGContextFillRect(ctx, rect);
CGContextRestoreGState(ctx);
}
@end
私はそれが重なって「MyOtherView」色「MYVIEW」赤をしたいが、その代わりに、それはちょうど不透明を描きますそれに赤いブロックがあります。しかし、 "MyOtherView"の-drawRect:関数をコピーして "MyView"のものに追加すると、これはうまくいくように思えます。誰でも私が間違っていることを知っている?これを行うことさえ可能ですか、それとも別の方法で接近すべきですか?
CALayerを使用してこの動作を確認することができます。これを確認してください。http://stackoverflow.com/a/18805190/2567532 – lekksi