본문 바로가기

분류 전체보기656

[processing] 볼팅기기 Processing Code float GRAVITY = 0.02; float ballX[] = new float[100]; float ballY[] = new float[100]; float speedX[] = new float[100]; float speedY[] = new float[100]; float prevX = 0; float prevY = 0; void setup() { size(400,600); background(255); for (int i=0; iwidth) { speedX[i] = speedX[i] * -0.9; ballX[i] = width; } else if (ballX[i] 2020. 9. 25.
[SwiftUI] 뷰 페이저 만들기 (Paged scroll view) PagerView // 페이지 단위 뷰를 보여줌 struct PagerView: View { let pageCount: Int let content: Content @Binding var currentIndex: Int @State private var dragOffset: CGFloat = 0 @State private var pageOffset: CGFloat = 0 // 드래그 없이 처음 레이아웃의 오프셋을 계산하기 위한 조건 @State private var isFirstLayout = true init(pageCount: Int, currentIndex: Binding, @ViewBuilder content: () -> Content) { self.pageCount = pageCount self.. 2020. 9. 25.
카메라 포커스 아이콘 (SVG) 카메라 포커싱 화면을 만들려고 벡터로 된 공짜 아이콘을 찾다가 계속 가입하라고 해서, 그냥 만들어서 썼다. 아래 4 조각을 모으면 되요. 2020. 9. 16.
[Android] 카카오 로그인(v1) 버튼 UI 변경하기 이글을 쓰고 두어달이 지난 후 바라던 대로 v2 로그인 라이브러리가 업데이트 되었다. 다행이다 라는 생각과 함께 글이 소용없게 되었다. ㅎㅎ ;; 그냥 v1, v2초기 버전이 이랬다 정도로 알고 넘어가요. --- 카카오 로그인 라이브러리 v1은 LoginButton 클래스를 이용해서 로그인하는 예제만 나와있다. (내가 못 본 것이라면 정말 정말 찾기 쉽지 않음) LoginButton UI가 이상하게 생겨서 UI는 직접 구현하고 로직을 처리하려고 문서를 찾아봤지만 v2 버전 말고는 없다. 보통 복잡한 로그인 플로우 처리를 설명하고, 그것들을 쓰기 편리하게 UI 클래스 하나로 선물하는데, 카카오 로그인 v1은 선물만 존재해서 확장성이 부족해 보인다. 어쨌든, 그래서 레이아웃을 새로 만들고 LoginButto.. 2020. 9. 9.
반동 움직임(Bounce Animation) // p5.js var ballX=200, ballY=200, vX=0, vY=0; var speed = 0.1; var bounce = 0.88; function setup() { createCanvas(320, 320); background(255); } function draw() { vX=(vX + (mouseX-ballX)*speed)*bounce; vY=(vY + (mouseY-ballY)*speed)*bounce; ballX=ballX+vX; ballY=ballY+vY; ellipse(ballX,ballY,20,20); } 여기서 주목해야 할 것은 이것이다. v = (v + (targetValue - nowValue)*speed)*bounce; nowValue += v; 2020. 8. 13.
[Flutter] 다이어로그 내에서 State 적용하기 다이어로그에서 텍스트 입력을 바로 검증하여 버튼의 활성상태를 변경하고자 한다. 다이어로그의 Context가 다이어로그를 호출한 위젯의 Context와 다르기 때문에 별도로 State 가 관리되어야 한다. 이때 StatefulBuilder 로 content를 구성하면 커스텀 위젯 클래스를 새로 만들지 않고 간단히 구현할 수 있다. 요로케.. void _promptDeletion() async { bool confirmed = await _showConfirmDeletion(); print("_accountDeletion $confirmed"); } Future _showConfirmDeletion() async { bool confirm = await showDialog( context: context, .. 2020. 8. 13.
다이아몬드 블러링 updated 2020-08-04 // sketch of p5js var ms = 0; function setup() { createCanvas(400, 400); } function draw() { background(220); noStroke(); ms += 10; if (ms > 200) { ms = 200; } for (var h = -10; h < 10; h++) { for (var k = -10; k < 10; k++) { var mx = 50 - abs(k * h); var r = 200 + mx; var g = ms; var b = 200; var c = color(r, g, b); var x = (k + 10) * 20; var y = (h + 10) * 20; fill(c); rect(.. 2020. 8. 4.
Anti-aliased 선 긋기 (Xiaolin Wu's line algorithm) Bresenham 선 긋기 방법은 매우 빠르나 경계선이 드러나서 보기에 좋지 않다. Xiaolin Wu의 안티알리아스 선 긋기를 배워본다. 이 알고리즘은 한쌍의 픽셀을 연달아 찍어서 선을 그리는 것인데, 반복동작으로 선의 길이만큼 여러 쌍의 픽셀을 그리고 양 끝점을 따로 계산해서 픽셀을 찍는다. 위에서 보는 것처럼 선은 픽셀칸의 중심을 정확하게 지나가는 것이 아니기 때문에, 선분에 영향력을 미치는 2개의 픽셀칸의 밀도를 조절하여 블러가 된 선을 그릴 수 있다. 픽셀 칸의 밀도를 1로 보았을 때, 선분 위에 있는 칸은 1-a 의 농도를 갖고 선분 아래에 있는 칸은 1-b의 농도를 갖으면 된다. 우선 기울기가 1보다 작은 경우만 생각하자. 나머지의 경우는 대칭을 생각하면 쉽게 확장이 가능하다. 이 경우 x .. 2020. 7. 28.
2개의 실수에서 가장 가까운 정수 값 찾기 2개의 숫자에서 가장 가까운 정수를 찾는 간단한 방법. 의외로 쉽다. var integerX = int(x + 0.5); 2020. 7. 27.
[SwiftUI] UIView 의 SwiftUI 랩핑 클래스 ref: Inline wrapping of UIKit or AppKit views within SwiftUI UIView를 스위프트UI로 활용하기 위해 UIViewRepresentable을 사용하는 데 템플릿 같은 구조를 매번 만들때마다 느낀 귀찮음이 있었다. 그 귀찮음을 덜어준 선델님의 랩핑 함수를 그대로 옮겨 저장한다. 알고보면 별거 아니지만, 왜 이걸 만들어볼 생각 안했을까.. // 와우!! 선델 짱. import UIKit import SwiftUI struct Wrap: UIViewRepresentable { typealias Updater = (Wrapped, Context) -> Void var makeView: () -> Wrapped var update: (Wrapped, Context).. 2020. 7. 27.
[Flutter] extension 사용하기 (확장 함수) Using extention methods in flutter 플러터에서 extension 함수를 사용하려면 다트 2.7 이상이 필요하다. pubspec.yaml 파일 # 확장 함수는 다트 2.7 부터 정식 포함 environment: sdk: ">=2.7.0 2020. 7. 18.
[SwiftUI] List 팁 List 간격 조정 Spacing between items of List in SwiftUI 리스트 아이템들의 간격을 조정하기 위해서 아이템뷰의 자체 생김새를 간격을 보이도록 작성하는 것도 방법이겠으나, 공식적인 함수 listRowInsets을 사용해서 간격을 조정하는 것이 뷰 관리에 좋다. listRowInsets은 ForEach안에서만 동작하는 점이 아쉽다. (Xcode 11.5, swiftUI 1.0) List { ForEach(feedItems, id: \.id) { item in FeedItemView(model: item) .listRowInsets(EdgeInsets(top: 20, leading: 20, bottom: 20, trailing: 20)) } }List 구분선 제거 Removi.. 2020. 7. 15.