React Native Interpolation

2023. 1. 9. 16:01·Swift/개발
728x90

앱 설명

  • 스크린을 터치하였을 때 좌표값을 구한다.

문법

  • UIScren : 디스플레이와 관련된 속성을 정의
  • onChanged : 제스처 값이 변경될 때 수행할 작업을 추가
  • preferredColorScheme : 기본 모드를 설정, 라이트모드, 다크모드
  • static : 일반적인 기능은 저장하는 것 , 모든 인스턴스에서 특정 프로퍼티 및 메서드를 공유
  • struct : 내부의 값이 전체 struct를 변경할때마다 전체 구조체가 자동적으로 변경. 상속이 불가능, 고유한 값
  • class : 단일 상속만 가능, 여러가지가 동일한 값을 가리킴. 클래스 내부의값이 변경되지만 다시 렌더링 되지는 않음.
  • state : 특정 행동을 하면 자동으로 state를 변환시켜준다 인터페이스 업데이트, 뷰를 다시 렌더링
import SwiftUI

struct ContentView: View {
    
    @State var offset: CGFloat = 0
    let screenWidth: CGFloat = UIScreen.main.bounds.width
    @State var outputValue: CGFloat = 0
    
    var body: some View {
        VStack {
            // 샘플 뷰
            Text("""
Interpolation.shared
.interpolate(
inputStartRange: 0,
inputEndRange: screenWidth,
outputStartRange: 0,
outputEndRange: 5,
value: newValue)

Input Value: \\(String(format: "%.1f", offset))
Output Value: \\(String(format: "%.1f", outputValue))
""")
            .frame(maxWidth: .infinity,alignment:  .leading)
            .padding(15)
            .background{
                RoundedRectangle(cornerRadius: 15, style: .continuous)
                    .fill(.primary.opacity(0.06))
            }
            .padding(15)
            
            Rectangle()
                .fill(.mint)
                .overlay {
                    Text("Drag Gesture")
                }
                .gesture(DragGesture()
                    .onChanged(({ value in
                        offset = value.location.x
                    }))

                )
                .onChange(of: offset) { newValue in
                    // 이것은 애니메이션에 많이 유요할것이다.
                    //React Native Interpolate 함수에서 영감을 얻음
                    //Drag Gesture Max Xlocation은 최대 화면 너비이므로
                    // 제스처 위치를 0...5에서 시리즈로 변환해야 합니다.
                    
                    outputValue = Interpolation.shared
                        .interpolate(
                            inputStartRange: 0,
                            inputEndRange: screenWidth,
                            outputStartRange: -200,
                            outputEndRange: 100,
                            value: newValue)
                }
        }
        .preferredColorScheme(.dark)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

class Interpolation{
    
    static let shared = Interpolation()
    
    func interpolate(
        inputStartRange x1: CGFloat,
        inputEndRange x2: CGFloat,
        outputStartRange y1: CGFloat,
        outputEndRange y2: CGFloat,
        value x: CGFloat
    )->CGFloat{
        // 선형 보간 공식
        let y = y1 + ((y2-y1)/(x2-x1)) * (x-x1)
        return y
    }
}
728x90

'Swift > 개발' 카테고리의 다른 글

애플 지도 클론코딩  (0) 2023.01.18
아이폰 키패드 클론코딩  (0) 2023.01.12
CustomRegistration  (0) 2023.01.08
AimatedTabIcon  (0) 2023.01.07
배달의 민족 - 로그인 페이지  (0) 2023.01.03
'Swift/개발' 카테고리의 다른 글
  • 애플 지도 클론코딩
  • 아이폰 키패드 클론코딩
  • CustomRegistration
  • AimatedTabIcon
bulmang
bulmang
모바일 개발자 도전
  • bulmang
    bulmang
    bulmang
  • 전체
    오늘
    어제
    • 분류 전체보기 (208)
      • 알고리즘 (68)
        • List (3)
        • Two Pointer (6)
        • Binary Search (4)
        • Prefix Sum (3)
        • Sort (4)
        • Brute Force (5)
        • Array (2)
        • String (4)
        • 프로그래머스 (12)
        • 백준 (9)
        • Queue (2)
        • Stack (2)
        • Recursion (12)
      • Computer Science (16)
        • Computer Architecture (6)
        • Operating System (5)
        • Network (2)
        • 기타 (2)
        • System Programming (1)
      • Swift (70)
        • 개발 (24)
        • 정리 (25)
        • 문법 (20)
      • Flutter (24)
      • 기타 (12)
        • 후기 (12)
      • Git (6)
      • Ios 오픈소스 (5)
      • UI 디자인 (5)
      • AppleScript (2)
  • 링크

    • Notion
    • Github
  • 태그

    컴퓨터구조
    자료구조
    개발
    협업
    SwiftUI
    알고리즘
    Xcode
    코딩테스트
    Swift
    riverpod
    til
    백준
    today i learned
    문법
    IOS
    재귀
    FLUTTER
    Java
    Apple Developer Academy
    피플
  • 최근 댓글

  • 최근 글

  • 인기 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.2
bulmang
React Native Interpolation
상단으로

티스토리툴바