2015-11-03 77 views
0

我有我從主UIViewController內調用的GameOver UIView。這只是一個'彈出窗口'窗口,它具有文本遊戲結束,分數和一些模糊效果,以模糊主UIViewcontroller。UIView不接受UIViewControllers數據

我嘗試將一個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類的初始化方法中的finalScore屬性,但您只是在初始化它之後設置其值。

你的初始化方法更改爲

- (id) initWithFrame:(CGRect)frame finalScore:(int)fs{ 
     // use 'fs' instead of 'self.finalScore' 
    } 

它應該工作。

+0

我最終這樣做了。覆蓋initWithFrame。 –

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