티스토리 뷰
728x90
반응형

import SwiftUI
/// 강아지 반복 이동 뷰
struct MovingDogView: View {
@State private var position: CGFloat = -(UIScreen.main.bounds.width / 2 - 50)
@State private var isFlipped = false // 이미지 반전 여부
@State private var timer: Timer?
private let duration: TimeInterval = 2
var body: some View {
VStack {
GifImageView("dog")
.frame(width: 50, height: 50)
.scaleEffect(x: isFlipped ? -1 : 1, y: 1) // 좌우 반전 효과
.offset(x: position)
.animation(.linear(duration: duration).repeatForever(autoreverses: true), value: position)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.onAppear {
startAnimation()
}
.onDisappear {
timer?.invalidate()
}
}
private func startAnimation() {
DispatchQueue.main.async {
position = UIScreen.main.bounds.width / 2 - 50
timer = .scheduledTimer(withTimeInterval: duration, repeats: true) { _ in
isFlipped.toggle() // 방향이 바뀔 때마다 이미지 반전
}
}
}
}
#Preview {
MovingDogView()
}
import SwiftUI
import WebKit
// https://medium.com/@venkateshmandapati/displaying-gifs-in-swiftui-using-gifimageview-04179d926552
/// GIF 뷰
struct GifImageView: UIViewRepresentable {
private let name: String
init(_ name: String) {
self.name = name
}
func makeUIView(context: Context) -> WKWebView {
let webview = WKWebView()
if let url = Bundle.main.url(forResource: name, withExtension: "gif"),
let data = try? Data(contentsOf: url) {
webview.load(data, mimeType: "image/gif", characterEncodingName: "UTF-8", baseURL: url.deletingLastPathComponent())
}
return webview
}
func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.reload()
}
}
iOS
Swift
SwiftUI
Xcode
Objective-C
Android
Animation
scaleEffect
offset
duration
linear
repeatForever
autoreverses
728x90
반응형
'iOS SwiftUI' 카테고리의 다른 글
| iOS SwiftUI Auto Scrolling Infinite Carousel Timer Animation (1) | 2025.09.01 |
|---|---|
| iOS SwiftUI DropDownMenu 드롭다운 메뉴 (Custom Picker) (1) | 2025.06.01 |
| iOS SwiftUI Infinite Carousel 무한 스크롤 배너 + Timer (1) | 2025.05.01 |
| iOS SwiftUI get color from image (이미지에서 평균 색상 추출) (0) | 2025.03.01 |
| iOS SwiftUI View Aligned Carousel Scrollview Paging (다음 뷰 약간 보이는 페이징 스크롤) (0) | 2025.02.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- TabBar
- TabView
- localizing
- 리젝
- 프로그레스
- swiftUI
- localizable
- picker
- custom segment
- 스위프트
- 심사
- 테이블뷰
- 아이오에스
- 로컬라이징
- 인디케이터
- Infinite Carousel
- 엑스코드
- indicator
- SWIFT
- Authorization
- Language
- AppStore
- presentationcompactadaptation
- permission
- Reject
- 현지화
- ios
- 다국어
- SKPayment
- Xcode
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
글 보관함