我有一个GameOver UIView,我从我的主UIViewController里面调用。它只是一个“弹出”窗口,文本游戏结束,分数和一些模糊效果模糊了主要的UIViewcontroller。
我尝试将一个int传递给UIView,但它不接受它,除非它在- (void)drawRect:(CGRect)rect
方法中。
如果我将分数标签移动到drawRect方法,则标签会更新。但模糊效果消失了。
我做错了什么?
MainViewController.m
#import "GameOverView.h"
@interface ViewController () {
GameOverView * gov;
}
- (void) showGameOver {
gov = [[GameOverView alloc] initWithFrame:self.view.bounds];
NSLog(@"Passing score of: %i", self.score);
gov.finalScore = self.score;
[self.view addSubview:gov];
}
GameOverView.h
@interface GameOverView : UIView {}
@property (nonatomic) int finalScore;
@end
GameOverView.M
@implementation GameOverView
- (id) initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code
//self.backgroundColor = [UIColor redColor];
NSLog(@"Score:%i", self.finalScore );
UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = super.bounds;
[super addSubview:visualEffectView];
UILabel * lblGameOver = [[UILabel alloc] initWithFrame:CGRectMake(0,0, frame.size.width, 200)];
lblGameOver.center = CGPointMake(frame.size.width/2, 100);
lblGameOver.text = [NSString stringWithFormat: @"GAME OVER %i", self.finalScore];
[self addSubview:lblGameOver];
UIButton * button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 200)];
button.center = CGPointMake(frame.size.width/2, 200);
[button setTitle:@"Start New Game" forState:UIControlStateNormal];
[button addTarget:self action:@selector(removeSelfFromSuperview) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:button];
}
return self;
}
- (void) removeSelfFromSuperview{
[self removeFromSuperview];
}
答案 0 :(得分:1)
您正在 GameOverView 类的init方法中使用 finalScore 属性,但您只是在初始化后设置其值。
将初始化方法更改为
- (id) initWithFrame:(CGRect)frame finalScore:(int)fs{
// use 'fs' instead of 'self.finalScore'
}
它应该有用。
答案 1 :(得分:1)
我想知道视图背景颜色没有任何问题。您正在初始化视图并将其添加为子视图,如下所示:
gov = [[GameOverView alloc] initWithFrame:self.view.bounds];
gov.finalScore = self.score;
[self.view addSubview:gov];
这将使视图背景颜色为黑色,这是默认颜色。因此,如果使用模糊效果,则没有太大的区别。
您需要在初始化期间为视图指定颜色:
gov = [[GameOverView alloc] initWithFrame:self.view.bounds];
[gov setBackgroundColor:[UIColor yourColor]];
[self.view addSubview:gov];
如果您打算将代码保存在initWithFrame中,则无需担心设置背景颜色。如果将代码保存在drawRect中,则必须设置背景颜色,否则它将为黑色。
设置分数标签时,无论是将其放在drawRect还是initWithFrame方法中都无关紧要。确保只有在必须在视图上绘图时才使用drawRect
方法,以便稍后可以使用setNeedsDisplay