2 Commits
0db2a2e480
...
cfb72bae67
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
cfb72bae67 |
Photos
|
4 years ago |
|
|
36a21cef01 |
Photos
|
4 years ago |
7 changed files with 235 additions and 54 deletions
-
4kplayer.xcodeproj/project.pbxproj
-
2kplayer/core/LocalManager.swift
-
2kplayer/core/MediaItem.swift
-
20kplayer/photo/SPhotoModel.swift
-
89kplayer/photo/SPhotoScrubber.swift
-
125kplayer/photo/SPhotoView.swift
-
11kplayer/util/AsyncImage.swift
@ -0,0 +1,89 @@ |
|||
// |
|||
// Created by Marco Schmickler on 25.06.22. |
|||
// Copyright (c) 2022 Marco Schmickler. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
import SwiftUI |
|||
import Haneke |
|||
|
|||
struct SPhotoScrubber: View { |
|||
@ObservedObject var model: SPhotoModel |
|||
@State var proxy: GeometryProxy? |
|||
|
|||
init(model: SPhotoModel) { |
|||
self.model = model |
|||
} |
|||
|
|||
var body: some View { |
|||
GeometryReader { geometry in |
|||
HStack { |
|||
ForEach(model.indexItems) { item in |
|||
AsyncImage(item: item, placeholder: { Text("Loading ...") }, |
|||
image: { Image(uiImage: $0).resizable() }) |
|||
} |
|||
.frame(height: 50) |
|||
} |
|||
.onAppear() { |
|||
proxy = geometry |
|||
} |
|||
.gesture( |
|||
DragGesture() |
|||
.onChanged { gesture in |
|||
let dragged = gesture.translation |
|||
|
|||
let xpos = Double(gesture.startLocation.x + dragged.width) |
|||
let width = Double(proxy!.size.width - 30) |
|||
|
|||
let i = Int(Double(model.allItems.count - 1) * (xpos / width)) |
|||
|
|||
setIndex(i: i) |
|||
|
|||
|
|||
print("size \(width) xpos \(xpos) i \(i)") |
|||
|
|||
model.scrub = true |
|||
} |
|||
.onEnded { gesture in |
|||
let xpos = gesture.predictedEndLocation.x |
|||
let width = Double(proxy!.size.width - 30) |
|||
|
|||
let i = Int(Double(model.allItems.count - 1) * (xpos / width)) |
|||
|
|||
setIndex(i: i) |
|||
|
|||
model.scrub = false |
|||
|
|||
print("size \(width) xpos \(xpos) i \(i)") |
|||
} |
|||
) |
|||
} |
|||
} |
|||
|
|||
private func setIndex(i: Int) { |
|||
if (i < model.allItems.count && i >= 0) { |
|||
model.index = i |
|||
|
|||
let item = model.allItems[i] |
|||
|
|||
if item === model.selectedItem { |
|||
return |
|||
} |
|||
|
|||
model.selectedItem = item |
|||
|
|||
if item.thumbUrl != nil && item.thumbImage == nil { |
|||
item.thumbImage = UIImage(systemName: "repeat") |
|||
let URL = Foundation.URL(string: item.thumbUrlAbsolute)! |
|||
|
|||
// print("fetch \(item.thumbUrlAbsolute)") |
|||
|
|||
Shared.imageCache.fetch(URL: URL).onSuccess { |
|||
i in |
|||
//newItem.image = i |
|||
item.thumbImage = i |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue