2014-01-24 50 views
1

我成功地將一個CAEmitter添加到子視圖中的UIView中,但該層發出的粒子在該視圖之外延伸。請參閱下面的代碼以獲取cookiecutter代碼和參數。我的問題是如何防止生成的粒子退出父視圖?ios - 如何限制CAEmitter粒子軌跡的範圍?

我試着用特定的框架初始化子視圖,甚至調整邊界的大小。在這兩種情況下,所發射的粒子都在界限內開始,但是在視野外飛出,似乎沒有界限。他們不會消失,直到我限制了他們的一生,或者直到他們到達屏幕的盡頭。有沒有辦法防止發射器與視圖外的對象交互?

CAEmitterLayer *emitterLayer = (CAEmitterLayer*)self.layer; 

emitterLayer.name = @"emitterLayer"; 
emitterLayer.emitterPosition = CGPointMake(self.frame.size.width/2, 0); 
emitterLayer.emitterZPosition = 0; 

emitterLayer.emitterSize = CGSizeMake(1.00, 1.00); 
emitterLayer.emitterDepth = 0.00; 

emitterLayer.emitterShape = kCAEmitterLayerCuboid; 

emitterLayer.renderMode = kCAEmitterLayerAdditive; 

emitterLayer.seed = 3534563912; 

// Create the emitter Cell 
CAEmitterCell *emitterCell = [CAEmitterCell emitterCell]; 

emitterCell.name = @"StatSap"; 
emitterCell.enabled = YES; 

emitterCell.contents = (id)[[UIImage imageNamed:@"mysprite.png"] CGImage]; 
emitterCell.contentsRect = CGRectMake(0.00, 0.00, 1.00, 1.00); 

emitterCell.magnificationFilter = kCAFilterTrilinear; 
emitterCell.minificationFilter = kCAFilterLinear; 
emitterCell.minificationFilterBias = 0.00; 

emitterCell.scale = 1.00; 
emitterCell.scaleRange = 0.00; 
emitterCell.scaleSpeed = -0.24; 

emitterCell.color = [[UIColor colorWithRed:1.00 green:0.28 blue:0.26 alpha:1.00] CGColor]; 
emitterCell.redRange = 1.00; 
emitterCell.greenRange = 0.34; 
emitterCell.blueRange = 0.31; 
emitterCell.alphaRange = 0.46; 

emitterCell.redSpeed = 2.03; 
emitterCell.greenSpeed = 0.00; 
emitterCell.blueSpeed = 0.00; 
emitterCell.alphaSpeed = 0.00; 

emitterCell.lifetime = 2.65; 
emitterCell.lifetimeRange = 1.02; 
emitterCell.birthRate = 267; 
emitterCell.velocity = 155.32; 
emitterCell.velocityRange = 25.00; 
emitterCell.xAcceleration = 0.00; 
emitterCell.yAcceleration = 911.00; 
emitterCell.zAcceleration = 0.00; 

// these values are in radians, in the UI they are in degrees 
emitterCell.spin = -0.175; 
emitterCell.spinRange = 12.566; 
emitterCell.emissionLatitude = 0.000; 
emitterCell.emissionLongitude = 0.000; 
emitterCell.emissionRange = 6.283; 

emitterLayer.emitterCells = @[emitterCell]; 

回答

3

您是否確定發射器的超視圖有clipsToBounds = YES

+0

joshd,謝謝你的建議。如果我將發射器層封裝在它自己的UIView中,並將UIView clipsToBounds設置爲YES,它就可以工作。不想更進一步,因爲它然後剪輯圖像和其他子視圖。 – Cindeselia

+0

優秀。是的,我的意思是超級查看發射器(意思是UIView)。感謝您的支票! – joshd