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