Repository files navigation

Learnima 애니배움

Nomadcoders - React Native 마스터클래스 (애니메이션 & 인터랙티브 앱)

애니메이션으로 단어를 분별할 수 있는 인터랙티브 react-native 모바일 앱입니다.


Animated는 주로 View에 적용이 잘 된다. (예를 들어서 TouchableOpacity는 보기에 안좋음)

Animated 규칙

  • 값을 사용한다면 반드시 Animated.Value를 사용해야 된다. (useState 사용 금지)
  • 값을 절대 직접적으로 정하지 않는다. (Y = 10; 다음과 같이 절대 금지)
  • Animatable components(Animated.View 등)에만 애니메이션을 줄 수 있다. (Core components에는 절대 애니메이션 부여 불가) 만약 직접 만든 component에 애니메이션을 부여하고 싶다면 createAnimatedComponent() 함수를 사용해야 한다.

useNativeDriver 속성

useNativeDriver = true라면 Native Driver을 사용하게 된다. Native Driver을 사용한다면 애니메이션에 관한 모든 것이 native로 전해져 실행된다. react-nativebridge를 통해 native로 정보를 전달하는데, 이 과정 필요없이 처음부터 native에서 실행하기에 리렌더링이 필요 없어 성능이 향상된다.

useRef

useRef렌더링이 일어나도 값을 유지하는 후크이다. 만약 애니메이션이 state에 따라 움직인다면 useRef로 렌더링이 일어났을 때 값을 유지시킬 수 있다 (useRef(new Animated.Value(0)).current useRef는 current로 값을 알 수 있음) (주의! 따라서 useRef 안에서useState렌더링을 일으키는 요소가 갱신되지 않음)

Interpolation

interpolation을 사용할 때는 Animated.Value의 내장 함수인 interpolate를 사용하면 된다. (new Animated.Value(0).interpolate({ ... })) interpolate는 첫번째 인수에 inputRangeoutputRange가 있는데, 각 인덱스마다 변환을 줄 값을 말한다.

Extrapolate

interpolate 함수에서 제공된 값의 범위를 넘었을 때 처리하는 것을 extrapolate이라고 한다. interpolate 함수의 extrapolate 속성을 변경시키면 된다. clamp는 범위를 넘으면 마지막 값을 유지하는 것이고, extend는 범위 패턴을 통해 직접 채워넣는 것이고, identityinterpolate 함수의 기존 값을 반환하는 것이다.

About

애니메이션으로 아이콘을 분별할 수 있는 인터랙티브 react-native 모바일 앱

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Learnima 애니배움

Nomadcoders - React Native 마스터클래스 (애니메이션 & 인터랙티브 앱)

애니메이션으로 단어를 분별할 수 있는 인터랙티브 react-native 모바일 앱입니다.


Animated는 주로 View에 적용이 잘 된다. (예를 들어서 TouchableOpacity는 보기에 안좋음)

Animated 규칙

  • 값을 사용한다면 반드시 Animated.Value를 사용해야 된다. (useState 사용 금지)
  • 값을 절대 직접적으로 정하지 않는다. (Y = 10; 다음과 같이 절대 금지)
  • Animatable components(Animated.View 등)에만 애니메이션을 줄 수 있다. (Core components에는 절대 애니메이션 부여 불가) 만약 직접 만든 component에 애니메이션을 부여하고 싶다면 createAnimatedComponent() 함수를 사용해야 한다.

useNativeDriver 속성

useNativeDriver = true라면 Native Driver을 사용하게 된다. Native Driver을 사용한다면 애니메이션에 관한 모든 것이 native로 전해져 실행된다. react-nativebridge를 통해 native로 정보를 전달하는데, 이 과정 필요없이 처음부터 native에서 실행하기에 리렌더링이 필요 없어 성능이 향상된다.

useRef

useRef렌더링이 일어나도 값을 유지하는 후크이다. 만약 애니메이션이 state에 따라 움직인다면 useRef로 렌더링이 일어났을 때 값을 유지시킬 수 있다 (useRef(new Animated.Value(0)).current useRef는 current로 값을 알 수 있음) (주의! 따라서 useRef 안에서useState렌더링을 일으키는 요소가 갱신되지 않음)

Interpolation

interpolation을 사용할 때는 Animated.Value의 내장 함수인 interpolate를 사용하면 된다. (new Animated.Value(0).interpolate({ ... })) interpolate는 첫번째 인수에 inputRangeoutputRange가 있는데, 각 인덱스마다 변환을 줄 값을 말한다.

Extrapolate

interpolate 함수에서 제공된 값의 범위를 넘었을 때 처리하는 것을 extrapolate이라고 한다. interpolate 함수의 extrapolate 속성을 변경시키면 된다. clamp는 범위를 넘으면 마지막 값을 유지하는 것이고, extend는 범위 패턴을 통해 직접 채워넣는 것이고, identityinterpolate 함수의 기존 값을 반환하는 것이다.

About

애니메이션으로 아이콘을 분별할 수 있는 인터랙티브 react-native 모바일 앱

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Learnima 애니배움

Nomadcoders - React Native 마스터클래스 (애니메이션 & 인터랙티브 앱)

애니메이션으로 단어를 분별할 수 있는 인터랙티브 react-native 모바일 앱입니다.


Animated는 주로 View에 적용이 잘 된다. (예를 들어서 TouchableOpacity는 보기에 안좋음)

Animated 규칙

  • 값을 사용한다면 반드시 Animated.Value를 사용해야 된다. (useState 사용 금지)
  • 값을 절대 직접적으로 정하지 않는다. (Y = 10; 다음과 같이 절대 금지)
  • Animatable components(Animated.View 등)에만 애니메이션을 줄 수 있다. (Core components에는 절대 애니메이션 부여 불가) 만약 직접 만든 component에 애니메이션을 부여하고 싶다면 createAnimatedComponent() 함수를 사용해야 한다.

useNativeDriver 속성

useNativeDriver = true라면 Native Driver을 사용하게 된다. Native Driver을 사용한다면 애니메이션에 관한 모든 것이 native로 전해져 실행된다. react-nativebridge를 통해 native로 정보를 전달하는데, 이 과정 필요없이 처음부터 native에서 실행하기에 리렌더링이 필요 없어 성능이 향상된다.

useRef

useRef렌더링이 일어나도 값을 유지하는 후크이다. 만약 애니메이션이 state에 따라 움직인다면 useRef로 렌더링이 일어났을 때 값을 유지시킬 수 있다 (useRef(new Animated.Value(0)).current useRef는 current로 값을 알 수 있음) (주의! 따라서 useRef 안에서useState렌더링을 일으키는 요소가 갱신되지 않음)

Interpolation

interpolation을 사용할 때는 Animated.Value의 내장 함수인 interpolate를 사용하면 된다. (new Animated.Value(0).interpolate({ ... })) interpolate는 첫번째 인수에 inputRangeoutputRange가 있는데, 각 인덱스마다 변환을 줄 값을 말한다.

Extrapolate

interpolate 함수에서 제공된 값의 범위를 넘었을 때 처리하는 것을 extrapolate이라고 한다. interpolate 함수의 extrapolate 속성을 변경시키면 된다. clamp는 범위를 넘으면 마지막 값을 유지하는 것이고, extend는 범위 패턴을 통해 직접 채워넣는 것이고, identityinterpolate 함수의 기존 값을 반환하는 것이다.

About

애니메이션으로 아이콘을 분별할 수 있는 인터랙티브 react-native 모바일 앱

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Learnima 애니배움

Nomadcoders - React Native 마스터클래스 (애니메이션 & 인터랙티브 앱)

애니메이션으로 단어를 분별할 수 있는 인터랙티브 react-native 모바일 앱입니다.


Animated는 주로 View에 적용이 잘 된다. (예를 들어서 TouchableOpacity는 보기에 안좋음)

Animated 규칙

  • 값을 사용한다면 반드시 Animated.Value를 사용해야 된다. (useState 사용 금지)
  • 값을 절대 직접적으로 정하지 않는다. (Y = 10; 다음과 같이 절대 금지)
  • Animatable components(Animated.View 등)에만 애니메이션을 줄 수 있다. (Core components에는 절대 애니메이션 부여 불가) 만약 직접 만든 component에 애니메이션을 부여하고 싶다면 createAnimatedComponent() 함수를 사용해야 한다.

useNativeDriver 속성

useNativeDriver = true라면 Native Driver을 사용하게 된다. Native Driver을 사용한다면 애니메이션에 관한 모든 것이 native로 전해져 실행된다. react-nativebridge를 통해 native로 정보를 전달하는데, 이 과정 필요없이 처음부터 native에서 실행하기에 리렌더링이 필요 없어 성능이 향상된다.

useRef

useRef렌더링이 일어나도 값을 유지하는 후크이다. 만약 애니메이션이 state에 따라 움직인다면 useRef로 렌더링이 일어났을 때 값을 유지시킬 수 있다 (useRef(new Animated.Value(0)).current useRef는 current로 값을 알 수 있음) (주의! 따라서 useRef 안에서useState렌더링을 일으키는 요소가 갱신되지 않음)

Interpolation

interpolation을 사용할 때는 Animated.Value의 내장 함수인 interpolate를 사용하면 된다. (new Animated.Value(0).interpolate({ ... })) interpolate는 첫번째 인수에 inputRangeoutputRange가 있는데, 각 인덱스마다 변환을 줄 값을 말한다.

Extrapolate

interpolate 함수에서 제공된 값의 범위를 넘었을 때 처리하는 것을 extrapolate이라고 한다. interpolate 함수의 extrapolate 속성을 변경시키면 된다. clamp는 범위를 넘으면 마지막 값을 유지하는 것이고, extend는 범위 패턴을 통해 직접 채워넣는 것이고, identityinterpolate 함수의 기존 값을 반환하는 것이다.

About

애니메이션으로 아이콘을 분별할 수 있는 인터랙티브 react-native 모바일 앱

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Learnima 애니배움

Nomadcoders - React Native 마스터클래스 (애니메이션 & 인터랙티브 앱)

애니메이션으로 단어를 분별할 수 있는 인터랙티브 react-native 모바일 앱입니다.


Animated는 주로 View에 적용이 잘 된다. (예를 들어서 TouchableOpacity는 보기에 안좋음)

Animated 규칙

  • 값을 사용한다면 반드시 Animated.Value를 사용해야 된다. (useState 사용 금지)
  • 값을 절대 직접적으로 정하지 않는다. (Y = 10; 다음과 같이 절대 금지)
  • Animatable components(Animated.View 등)에만 애니메이션을 줄 수 있다. (Core components에는 절대 애니메이션 부여 불가) 만약 직접 만든 component에 애니메이션을 부여하고 싶다면 createAnimatedComponent() 함수를 사용해야 한다.

useNativeDriver 속성

useNativeDriver = true라면 Native Driver을 사용하게 된다. Native Driver을 사용한다면 애니메이션에 관한 모든 것이 native로 전해져 실행된다. react-nativebridge를 통해 native로 정보를 전달하는데, 이 과정 필요없이 처음부터 native에서 실행하기에 리렌더링이 필요 없어 성능이 향상된다.

useRef

useRef렌더링이 일어나도 값을 유지하는 후크이다. 만약 애니메이션이 state에 따라 움직인다면 useRef로 렌더링이 일어났을 때 값을 유지시킬 수 있다 (useRef(new Animated.Value(0)).current useRef는 current로 값을 알 수 있음) (주의! 따라서 useRef 안에서useState렌더링을 일으키는 요소가 갱신되지 않음)

Interpolation

interpolation을 사용할 때는 Animated.Value의 내장 함수인 interpolate를 사용하면 된다. (new Animated.Value(0).interpolate({ ... })) interpolate는 첫번째 인수에 inputRangeoutputRange가 있는데, 각 인덱스마다 변환을 줄 값을 말한다.

Extrapolate

interpolate 함수에서 제공된 값의 범위를 넘었을 때 처리하는 것을 extrapolate이라고 한다. interpolate 함수의 extrapolate 속성을 변경시키면 된다. clamp는 범위를 넘으면 마지막 값을 유지하는 것이고, extend는 범위 패턴을 통해 직접 채워넣는 것이고, identityinterpolate 함수의 기존 값을 반환하는 것이다.

About

애니메이션으로 아이콘을 분별할 수 있는 인터랙티브 react-native 모바일 앱

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Learnima 애니배움

Nomadcoders - React Native 마스터클래스 (애니메이션 & 인터랙티브 앱)

애니메이션으로 단어를 분별할 수 있는 인터랙티브 react-native 모바일 앱입니다.


Animated는 주로 View에 적용이 잘 된다. (예를 들어서 TouchableOpacity는 보기에 안좋음)

Animated 규칙

  • 값을 사용한다면 반드시 Animated.Value를 사용해야 된다. (useState 사용 금지)
  • 값을 절대 직접적으로 정하지 않는다. (Y = 10; 다음과 같이 절대 금지)
  • Animatable components(Animated.View 등)에만 애니메이션을 줄 수 있다. (Core components에는 절대 애니메이션 부여 불가) 만약 직접 만든 component에 애니메이션을 부여하고 싶다면 createAnimatedComponent() 함수를 사용해야 한다.

useNativeDriver 속성

useNativeDriver = true라면 Native Driver을 사용하게 된다. Native Driver을 사용한다면 애니메이션에 관한 모든 것이 native로 전해져 실행된다. react-nativebridge를 통해 native로 정보를 전달하는데, 이 과정 필요없이 처음부터 native에서 실행하기에 리렌더링이 필요 없어 성능이 향상된다.

useRef

useRef렌더링이 일어나도 값을 유지하는 후크이다. 만약 애니메이션이 state에 따라 움직인다면 useRef로 렌더링이 일어났을 때 값을 유지시킬 수 있다 (useRef(new Animated.Value(0)).current useRef는 current로 값을 알 수 있음) (주의! 따라서 useRef 안에서useState렌더링을 일으키는 요소가 갱신되지 않음)

Interpolation

interpolation을 사용할 때는 Animated.Value의 내장 함수인 interpolate를 사용하면 된다. (new Animated.Value(0).interpolate({ ... })) interpolate는 첫번째 인수에 inputRangeoutputRange가 있는데, 각 인덱스마다 변환을 줄 값을 말한다.

Extrapolate

interpolate 함수에서 제공된 값의 범위를 넘었을 때 처리하는 것을 extrapolate이라고 한다. interpolate 함수의 extrapolate 속성을 변경시키면 된다. clamp는 범위를 넘으면 마지막 값을 유지하는 것이고, extend는 범위 패턴을 통해 직접 채워넣는 것이고, identityinterpolate 함수의 기존 값을 반환하는 것이다.

About

애니메이션으로 아이콘을 분별할 수 있는 인터랙티브 react-native 모바일 앱

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Learnima 애니배움

Nomadcoders - React Native 마스터클래스 (애니메이션 & 인터랙티브 앱)

애니메이션으로 단어를 분별할 수 있는 인터랙티브 react-native 모바일 앱입니다.


Animated는 주로 View에 적용이 잘 된다. (예를 들어서 TouchableOpacity는 보기에 안좋음)

Animated 규칙

  • 값을 사용한다면 반드시 Animated.Value를 사용해야 된다. (useState 사용 금지)
  • 값을 절대 직접적으로 정하지 않는다. (Y = 10; 다음과 같이 절대 금지)
  • Animatable components(Animated.View 등)에만 애니메이션을 줄 수 있다. (Core components에는 절대 애니메이션 부여 불가) 만약 직접 만든 component에 애니메이션을 부여하고 싶다면 createAnimatedComponent() 함수를 사용해야 한다.

useNativeDriver 속성

useNativeDriver = true라면 Native Driver을 사용하게 된다. Native Driver을 사용한다면 애니메이션에 관한 모든 것이 native로 전해져 실행된다. react-nativebridge를 통해 native로 정보를 전달하는데, 이 과정 필요없이 처음부터 native에서 실행하기에 리렌더링이 필요 없어 성능이 향상된다.

useRef

useRef렌더링이 일어나도 값을 유지하는 후크이다. 만약 애니메이션이 state에 따라 움직인다면 useRef로 렌더링이 일어났을 때 값을 유지시킬 수 있다 (useRef(new Animated.Value(0)).current useRef는 current로 값을 알 수 있음) (주의! 따라서 useRef 안에서useState렌더링을 일으키는 요소가 갱신되지 않음)

Interpolation

interpolation을 사용할 때는 Animated.Value의 내장 함수인 interpolate를 사용하면 된다. (new Animated.Value(0).interpolate({ ... })) interpolate는 첫번째 인수에 inputRangeoutputRange가 있는데, 각 인덱스마다 변환을 줄 값을 말한다.

Extrapolate

interpolate 함수에서 제공된 값의 범위를 넘었을 때 처리하는 것을 extrapolate이라고 한다. interpolate 함수의 extrapolate 속성을 변경시키면 된다. clamp는 범위를 넘으면 마지막 값을 유지하는 것이고, extend는 범위 패턴을 통해 직접 채워넣는 것이고, identityinterpolate 함수의 기존 값을 반환하는 것이다.

About

애니메이션으로 아이콘을 분별할 수 있는 인터랙티브 react-native 모바일 앱

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Learnima 애니배움

Nomadcoders - React Native 마스터클래스 (애니메이션 & 인터랙티브 앱)

애니메이션으로 단어를 분별할 수 있는 인터랙티브 react-native 모바일 앱입니다.


Animated는 주로 View에 적용이 잘 된다. (예를 들어서 TouchableOpacity는 보기에 안좋음)

Animated 규칙

  • 값을 사용한다면 반드시 Animated.Value를 사용해야 된다. (useState 사용 금지)
  • 값을 절대 직접적으로 정하지 않는다. (Y = 10; 다음과 같이 절대 금지)
  • Animatable components(Animated.View 등)에만 애니메이션을 줄 수 있다. (Core components에는 절대 애니메이션 부여 불가) 만약 직접 만든 component에 애니메이션을 부여하고 싶다면 createAnimatedComponent() 함수를 사용해야 한다.

useNativeDriver 속성

useNativeDriver = true라면 Native Driver을 사용하게 된다. Native Driver을 사용한다면 애니메이션에 관한 모든 것이 native로 전해져 실행된다. react-nativebridge를 통해 native로 정보를 전달하는데, 이 과정 필요없이 처음부터 native에서 실행하기에 리렌더링이 필요 없어 성능이 향상된다.

useRef

useRef렌더링이 일어나도 값을 유지하는 후크이다. 만약 애니메이션이 state에 따라 움직인다면 useRef로 렌더링이 일어났을 때 값을 유지시킬 수 있다 (useRef(new Animated.Value(0)).current useRef는 current로 값을 알 수 있음) (주의! 따라서 useRef 안에서useState렌더링을 일으키는 요소가 갱신되지 않음)

Interpolation

interpolation을 사용할 때는 Animated.Value의 내장 함수인 interpolate를 사용하면 된다. (new Animated.Value(0).interpolate({ ... })) interpolate는 첫번째 인수에 inputRangeoutputRange가 있는데, 각 인덱스마다 변환을 줄 값을 말한다.

Extrapolate

interpolate 함수에서 제공된 값의 범위를 넘었을 때 처리하는 것을 extrapolate이라고 한다. interpolate 함수의 extrapolate 속성을 변경시키면 된다. clamp는 범위를 넘으면 마지막 값을 유지하는 것이고, extend는 범위 패턴을 통해 직접 채워넣는 것이고, identityinterpolate 함수의 기존 값을 반환하는 것이다.

About

애니메이션으로 아이콘을 분별할 수 있는 인터랙티브 react-native 모바일 앱

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages