2013-03-12 51 views
1

我正試圖將一個簡單的粒子效果疊加添加到我的UIViewController實例之一中。我跟着我發現的幾個教程,但他們都沒有處理視圖控制器,他們的故事板僅僅是一個視圖,沒有控制器,這是令人困惑的。CAEmitterLayer在我的視圖控制器中不可見

這是我的代碼,我只是想弄明白爲什麼我看不到粒子效果。我錯過了什麼?視圖本身肯定存在並且添加了(如果我改變它的顏色或我可以看到它的東西),它只是空的,並沒有顯示任何粒子效果。引用的圖像文件絕對在項目和目標中,那麼我在這裏做了哪些錯誤?我是否需要以某種方式將CAEmitterLayer添加到rainView?這部分教程沒有提供任何幫助!

RainfallOverlay.h

#import <UIKit/UIKit.h> 
#import <QuartzCore/QuartzCore.h> 

@interface RainfallOverlay : UIView { 
    CAEmitterLayer *rainEmitter; 
} 

@end 

RainfallOverlay.m

#import "RainfallOverlay.h" 

@implementation RainfallOverlay 

- (void) awakeFromNib 
{ 
    rainEmitter = (CAEmitterLayer *) self.layer; 
    rainEmitter.emitterPosition = CGPointMake(160, 100); 
    rainEmitter.emitterSize = CGSizeMake(10, 10); 
    rainEmitter.renderMode = kCAEmitterLayerAdditive; 

    CAEmitterCell *rain = [CAEmitterCell emitterCell]; 
    rain.birthRate = 200; 
    rain.lifetime = 2.0; 
    rain.lifetimeRange = 1.5; 
    rain.color = [[UIColor colorWithRed: 0.2 green: 0.4 blue: 0.8 alpha: 0.1] CGColor]; 
    rain.contents = (id) [[UIImage imageNamed: @"Particles_rain.png"] CGImage]; 
    rain.name = @"rain"; 
    rain.velocity = 150; 
    rain.velocityRange = 100; 
    rain.emissionRange = M_PI_2; 
    rain.emissionLongitude = 0.025 * 180/M_PI; 
    rain.scaleSpeed = 0; 
    rain.spin = 0.5; 

    rainEmitter.emitterCells = [NSArray arrayWithObject: rain]; 
} 

@end 

ViewController.m viewDidLoad中

RainfallOverlay *rainView = [[RainfallOverlay alloc] initWithFrame: CGRectMake(0, 0, 320, 250)]; 
[rainView setUserInteractionEnabled: NO]; 
[self.view bringSubviewToFront: rainView]; 
[self.view addSubview: rainView]; 

回答

4

有2個問題:

  • awakeFromNib只有在視圖從nib文件加載時纔會被調用。在你的情況下,你必須執行initWithFrame
  • 您必須覆蓋layerClassself.layer返回CAEmitterLayer。只是將該圖層投射到CAEmitterLayer不起作用。

所以你RainfallOverlay實施應該是這樣的:

+ (Class)layerClass 
{ 
    return [CAEmitterLayer class]; 
} 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     rainEmitter = (CAEmitterLayer *) self.layer; 

     // ... remaining setup 
    } 
    return self; 
} 
+0

完全,得到它,三江源:) – Luke 2013-03-12 14:26:46

相關問題