티스토리 뷰
안녕하세요 :) 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의 관계와 똑같은것 같아요.
● xAcceleration : cell에 적용된 가속도 벡터의 x구성요소. 기본값은 0.0
● yAcceleration : cell에 적용된 가속도 벡터의 y구성요소. 기본값은 0.0
● zAcceleration : cell에 적용된 가속도 벡터의 z구성요소. 기본값은 0.0
얘네 셋은 방출된 객체에 적용되는 가속도 벡터에요. 기본값은 (0,0,0)
xAcceleration을 60으로 줬을 경우. 다른건 0
y나 z는 바꿔도 큰 차이가 없ㅇ어요..왜지......미묘한 차이는 있긴함.
해당 방향에 대한 "가속도"라고 생각하시면 될 것 같습니다. 큰 값을 줄수록 cell의 속도가 빨라져요.
● scale : Cell에 적용된 배율 인수를 지정. 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은 만약 내가 떨어지면서 크기를 조정하게 하고싶어!!라고 할 때 사용합니다.
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로 넣어야함)
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를 사용하시는 분들께 도움이 되었으면 좋겠네요. 그리고 나중에 저에게도...
'iOS' 카테고리의 다른 글
iOS ) Apple의 Sandbox정책과 Files앱 (1) | 2018.02.21 |
---|---|
iOS ) UITextfield에 Static Prefix를 넣고싶다면... (1) | 2018.02.20 |
iOS ) shouldChangeCharactersIn range / NSRange (3) | 2018.02.16 |
iOS ) UIButton에 이미지를 넣었는데 안보일때 (0) | 2018.02.10 |
iOS ) UIButton / UILabel에 이미지추가 (1) | 2018.02.03 |
- WidgetKit
- 제이슨 파싱
- ios 13
- Swift
- iOS delegate
- UIBezierPath
- Combine
- IOS
- Xcode
- swift 공부
- swift delegate
- actor
- 스위프트 문법
- WWDC
- Git
- swift sort
- 스위프트
- swift array
- WKWebView
- SwiftUI
- github
- swift3
- np-complete
- 피아노
- fastlane
- np-hard
- 회고
- Accessibility
- FLUTTER
- swift tutorial
- Total
- Today
- Yesterday