티스토리 뷰

iOS

iOS ) CAEmitterCell 프로퍼티 정리

Zedd0202 2018. 2. 17. 15:51
반응형

안녕하세요 :) Zedd입니다.

지금 CAEmitterLayer글 쓰고 있는데..이 글에서 CAEmitterCell 프로퍼티들 설명하면 좀 너무 길어질 것 같아서..ㅎㅎ

CAEmitterCell들의 프로퍼티들을 뭔가 다 알고싶은....머 언젠간 참고할 일이 있겠죠.

시작하겠습니다.



CAEmitterCell 프로퍼티 정리



name : cell의 이름. 기본값은 nil이다.

● isEnabled : 이 cell을 렌더링 할지 여부를 제어한다.

● birthRate : 매 초마다 생성된 방사 객체수. 기본값은 zero.



왼쪽은 birthRate가 20. 오른쪽은 3. 매 초마다 생성되는 cell이라고 생각하면 된다. 즉 클수록 많이 생성됨.

(이 birthRate는 Layer쪽에도 있는데, 이 cell의 birthRate와  layer의 birthRate를 곱한값이 매 초마다 생성되는 cell의 개수입니다. 비례관계니 cell의 birthRate가 커지면 매 초 마다 생성되는 cell의 개수도 커지겠죠?)


● lifetime : 방출된 각 cell의 수명(초 단위). 평균치로 지정. 기본값 == 0. cell의 수명은 lifetimeRange로 지정된 범위의 임의의 양에 따라 달라진다. 

● lifetimeRange : cell의 수명이 달라질 수 있는 평균값. 기본값 == 0 

이 두가지가 이해가 잘 안갈 수 있음.

ex ) 만약 lifetimeRange이 0이면 "모든" cell은 lifetime이 가진 값으로 수명이 주어짐.

즉, lifetime이 2라면 



모든 cell이 딱 2초만 살고 없어짐. cell이 사라지는 걸 각각 다르게 해주고 싶다면? 

==> 이 때 lifetimeRange를 사용.

ex ) lifetimeRange가 3초이고 lifetime이 10 초인 경우 셀의 실제 유효 기간은 7-13 초 사이. 


● emissionLatitude : 방출 각도의 위도 방향. 방출 위도는 z축으로부터의 방출 각도의 방향. 여위도(colatitude)라고도 불림. 기본값은 0.0

● emissionLongitude : 방출 각도의 경도 방향. 방출 경도는 xy평면에서 방출 각도의 방향.

방위각(azimuth)이라고도 불림. 기본값은 0.0


이걸 사실 실험을 많이 해봤는데... emissionLatitude는 어떤건지 잘 감이 안오네요.

emissionLongitude는 90을 줬을 때,(emissionLatitude은 0.0) 

밑으로 떨어지지않고 오른쪽으로 꺾여서 cell들이 간다.


아하 emissionLatitude도 90, emissionLongitude도 90을 주면,

위 그림처럼 오른쪽으로 안가고 왼쪽으로 가네요...ㅠㅠ잘 이해가 안감...


※ 둘 다  0을 주면 저는 아무것도 안나오네요...주의!!하나는 0이어도 댐 ㅎ

 

● emissionRange : 방사 각도 주변에서 원추를 정의하는 각도(라디안). cell은 이 원추에 균일하게 분포되어 있다. 기본값은 0.




왼쪽이 emissionRange를 90으로 준거고 오른쪽은 0.

뭔가 제 생각엔..왼쪽은 90도라는 range를 준거니까 사실 이 화면안에서는 안보이지만, 그 각도안에서 균일하게 뿌려주고 있는 것 같아요. 아마?...


● velocity : Cell의 초기속도. Cell의 속도는 velocityRange로 지정된 범위 내에서 임의의 양에 따라 달라집니다. 기본값은 0.0

● velocityRange : Cell의 속도가 다를 수 있는 양. 범위는 초기 속도값이 변경되는 평균 양을 지정합니다. 기본값은 0.0


위에서 lifetimeRange과 lifetime의 관계와 똑같은것 같아요.


● xAccelerationcell에 적용된 가속도 벡터의 x구성요소. 기본값은 0.0

yAcceleration : cell에 적용된 가속도 벡터의 y구성요소. 기본값은 0.0

zAccelerationcell에 적용된 가속도 벡터의 z구성요소. 기본값은 0.0


얘네 셋은 방출된 객체에 적용되는 가속도 벡터에요. 기본값은 (0,0,0)


xAcceleration을 60으로 줬을 경우. 다른건 0



y나 z는 바꿔도 큰 차이가 없ㅇ어요..왜지......미묘한 차이는 있긴함. 

해당 방향에 대한 "가속도"라고 생각하시면 될 것 같습니다. 큰 값을 줄수록 cell의 속도가 빨라져요.


● scaleCell에 적용된 배율 인수를 지정. cell의 배율은 scaleRange로 지정된 범위 내에서 임의의 양에 따라 달라집니다. scaleSpeed프로퍼티는 변경 속도를 결정합니다. 기본값은 1. 

● scaleRange : scale이 다를 수 있는 범위를 지정합니다. 범위는 cell의 수명동안 cell에 대해 scale값이 다를 수 있는 평균 양을 지정. 기본값은 0.0.

● scaleSpeed : cell의 수명동안 scale이 변경되는 속도입니다. 속도변화는 초당 변화율로 정의. 기본값은 0.0


scale과 scaleRange관계 역시 lifetime과 lifetimeRange의 관계로 보시면 될 것 같습니다.


scaleRange는 지정하지 않고 == 0, scale만 1로 지정해줬을 경우. (기본값이 1이긴하지만..)

모든 cell의 크기가 같습니다. scaleRange를 지정해준경우. 저는 2로 줘볼게요. 

짠. 2배커지거나, 2배 작아지거나. (맞나..? scale의 기본값이 1이니까 3배인가..?)

+ ) 3배가 맞는 것 같습니다. scale을 1로하고 range를 1로 했을 때

이런 결과가 나와서...


아무튼 이렇게 각 cell의 크기를 조절할 수 있게 하는 것이 scale~프로퍼티입니다.


scaleSpeed은 만약 내가 떨어지면서 크기를 조정하게 하고싶어!!라고 할 때 사용합니다.




  1. cell.scale = 1

    cell.scaleRange = 2

    cell.scaleSpeed = 1

          

저 그냥..1로 줬을 뿐인데....ㅎㅎ..

위에 처럼 됐네요. 보통 scaleSpeed에는 -값을 넣는 것 같아요. -0.1이나 -0.05정도로 해주면 딱 적당.


적당..?;; 이건 해당 상황에 따라 조절하면 될 것 같음. 위에는 -0.1준거 ㅇㅇ

저렇게 크기차이가 너무 크게 나지 않도록 하려면 range를 줄여주면 되겠죠?

위 상황은 2준거ㅇㅇ



● spin : cell에 적용할 회전 속도(초당 라디안 단위). cell의 spin은 spinRange에 지정된 범위의 임의의 양에 따라 달라짐. 기본값은 0.0

● spinRange : cell spin의 수명에 따라 달라질 수 있는 양. 범위는 spin값이 cell의 수명동안 다를 수 있는 평균양을 지정. 기본값은 0.0


역시나 lifetime과 lifetimeRange관계와 똑같음.

위 움짤들을 보시면 알겠지만 cell들이 막 회전하면서 내려오죠? 이게 다 spin값을 지정해줘서 그런거 ㅇㅇ

만약 spin을 안주면?



ㅋ........(무미건조)

회전을 꼭 줍시다 ^_^..



그렇다고 많이주면 x

위 상황은 10준거임 range는 3. spin은 2, spineRange는 3정도가 적당한 것 같다. 뭐 이것도 상황에 따라 달라질것.


● color : 각 cell의 색상. 위에서 색상을 바꿀 수 있다고 그랬죠? 다 이 프로퍼티 덕분.

만약 color를 안주게 되면

이렇게 원래 이미지의 색상으로 나오게 됩니다. color는 기본적으로 불투명한 흰색이고, colorRange는 (0,0,0,0).


● redRange : cell의 빨강 성분이 달라질 수 있는 양. (range라는 것을 주목하세요. 달라질 수 있습니다.) 이는 cell의 color 프로퍼티의 빨간색 구성 요소가 달라질 수 있는 평균 양을 지정합니다.  기본값은 0.0 

● greenRange : cell의 초록 성분이 달라질 수 있는 양. 이는 cell의 color 프로퍼티의 초색 구성 요소가 달라질 수 있는 평균 양을 지정합니다. 기본값은 0.0

● blueRange : cell의 파랑 성분이 달라질 수 있는 양. 이는 cell의 color 프로퍼티의 파랑색 구성 요소가 달라질 수 있는 평균 양을 지정합니다. 기본값은 0.0

● alphaRange : cell의 알파 성분이 달라질 수 있는 양. 이는 cell의 color 프로퍼티의 알파 구성 요소가 달라질 수 있는 평균 양을 지정합니다. 기본값은 0.0


위 그림은 빨강이면 딱 빨강. 노랑이면 노랑 이렇게 나왔었죠? 내가 근데 어떤거는 빨갛고 어떤거는 안그랬으면 좋겠고..어떤거는 투명했으면 좋겠고 이러고 싶다! 이러면 저 rgb+alpha range를 건들이면 됩니다.

alphaRange는 5를 준 상태에요. 너무 큰 값을 주면 아예 보이지 않으니;;;;; 적당히 주시면 됩니다. 아니 글고 원래 alpha는..저는 막 좀 투명하게 하고싶다 그러면 0.5 이런식으로 줬는데 여기서는 작은 값을 주면 안되고, 큰 값을 줄수록 투명해집니다..

그리고 위에는 redRange만 100으로 준 상태인데..뭐 이거는 상황에 따라서 green이랑 blue range주면 될듯?


● redSpeed : 빨강 구성요소가 cell 수명 동안 변화하는 속도(초) 속도변화는 초당 변화율로 정의됩니다. 기본값은 0

● greenSpeed : 초록 구성요소가 cell 수명 동안 변화하는 속도(초) 속도변화는 초당 변화율로 정의됩니다. 기본값은 0

● blueSpeed : 파랑 구성요소가 cell 수명 동안 변화하는 속도(초) 속도변화는 초당 변화율로 정의됩니다. 기본값은 0

● alphaSpeed : 알파 구성요소가 cell 수명 동안 변화하는 속도(초) 속도변화는 초당 변화율로 정의됩니다. 기본값은 0


저 위에서는 각 cell마다 다른 색상을 주고싶었다!! 이거면, 이거는 떨어지면서 색상을 계속 바뀌게? 하고싶다! 라면 이 speed를 이용하면 됩니다.



alphaSpeed를 -0.5로 준상태. speed에는 위 range처럼 큰 값을 넣어주면...; 뭔가 안바뀌는데...작은 값을 넣어주면 됩니다 ㅎㅎㅎ..-0.1이 젤 이쁜것 같음. Zedd야 -0.1넣어 알겠지



● contents레이어의 내용을 제공하는 객체. 레이어는 이 프로퍼티를 CGImage로 설정하여 이미지를 내용으로 표시할 수 있습니다.

 일반적으로 CGImageRef. 기본값은 nil입니다.

자 이게 무슨소리냐. 바로 이 프로퍼티에 우리의 이미지를 할당하면 됩니다. 바로 이 cell의 image를 우리의 별이나 하트, 사과 이미지로 넣어주면 (cgimage로 넣어야함)


  1.  cell.contents = UIImage(named: "heart")?.cgImage

        

이렇게요. 위 코드는 이해하기 쉽게 저렇게 이미지 이름을 직접적으로 넣어줬지만, 함수 파라미터로 받은 string값을 넘겨주는게 낫겠죠?



● contentsRect : 기본값은 (0,0,1,1). 단위 좌표 공간 내에서의 contents 일부를 지정하는 rectangle. 기본적으로 이 프로퍼티는 기본값은 (0,0,1,1)로 설정되어 레이어의 모든 contents가 그려집니다. 단위 사각형 외부의 픽셀이 요청되면 내용 이미지의 가장자리 픽셀이 바깥쪽으로 확장됩니다. 

이 프로퍼티에 빈 사각형을 할당하면 결과가 정의되지 않습니다. (0,0,0,0하면 당연히 안나오겠죠?)

너비와 높이는 크게 주면 이상하게 됩니다.

(0,0,10,10)을 준 결과



이거는 딱히 지정해줄 필요 없는 프로퍼티인것 같아요. 허허



● contentsScale : cell contents에 적용되는 scale비율을 정의. 

이건 왜 또 크게 주면 작아지는거야......

10줬더니 이렇게댐...모지..ㅎㅎ..

이건 큰값을 줄수록 contents가 작아지는 것 같아요. 기본값에 대한 내용이 없는데..기본값은 1인듯?



● minificationFilter : contents의 크기를 줄일 때 사용되는 필터. 이 프로퍼티에 사용할 수 있는 값은 배율 필터에 나열되어 있습니다. 기본값은 kCAFilterLinear. 

● magnificationFilter : contents의 크기를 늘릴 때 사용되는 필터. 이 프로퍼티에 사용할 수 있는 값은 배율 필터에 나열되어 있습니다. 기본값은 kCAFilterLinear.

● minificationFilterBias : 상세 수준을 결정하기 위해 minification filter에서 사용하는 bias 계수입니다.

이 값은 kCAFilterTrilinear로 설정된 경우 minificationFilter 등록 정보에서 사용됩니다. 이 프로퍼티의 기본값은 0입니다.


minificationFilter, magnificationFilter에 들어가는 저 kCAFilterLinear가 어디에 있나보니까 여기에 있음..

진짜..엄청많은데..이거는 다음에 알아보는걸로; 몇개 다르게 넣어봤는데 달라지는게 없다.



으아ㅏ아아아ㅏ아아ㅏ 이렇게 다 봤습니다... CAEmitterCell.....이렇게 많을 줄 몰랐는데..굉장히 많죠? 이렇게 다양하게 해당 cell의 속성?을 변경할 수 있다는 거죠 ㅎㅎㅎㅎ 암튼 CAEmitterLayer를 사용하시는 분들께 도움이 되었으면 좋겠네요. 그리고 나중에 저에게도...

반응형