@@ -14,7 +14,7 @@ class AssetVideoScrollView: UIScrollView {
14
14
private var widthConstraint : NSLayoutConstraint ?
15
15
16
16
let contentView = UIView ( )
17
- var maxDuration : Double = 15
17
+ public var maxDuration : Double = 15
18
18
private var generator : AVAssetImageGenerator ?
19
19
20
20
override init ( frame: CGRect ) {
@@ -116,7 +116,6 @@ class AssetVideoScrollView: UIScrollView {
116
116
}
117
117
118
118
private func getThumbnailTimes( for asset: AVAsset , numberOfThumbnails: Int ) -> [ NSValue ] {
119
-
120
119
let timeIncrement = ( asset. duration. seconds * 1000 ) / Double( numberOfThumbnails)
121
120
var timesForThumbnails = [ NSValue] ( )
122
121
for index in 0 ..< numberOfThumbnails {
@@ -128,11 +127,19 @@ class AssetVideoScrollView: UIScrollView {
128
127
}
129
128
130
129
private func generateImages( for asset: AVAsset , at times: [ NSValue ] , with maximumSize: CGSize , visibleThumnails: Int ) {
131
-
132
130
generator = AVAssetImageGenerator ( asset: asset)
133
- generator? . appliesPreferredTrackTransform = true
134
- let scaledSize = CGSize ( width: maximumSize. width * UIScreen. main. scale, height: maximumSize. height * UIScreen. main. scale)
131
+ let scaledSize = CGSize ( width: maximumSize. width * UIScreen. main. scale, height: maximumSize. height * UIScreen. main. scale)
132
+ let composition = AVMutableVideoComposition ( propertiesOf: asset)
133
+ var renderSize = CGSize ( width: CGFloat . greatestFiniteMagnitude, height: CGFloat . greatestFiniteMagnitude)
134
+ for track in asset. tracks where track. mediaType == . video {
135
+ let size = track. naturalSize
136
+ if size. width <= renderSize. width && size. height <= renderSize. height {
137
+ renderSize = size
138
+ }
139
+ }
140
+ composition. renderSize = renderSize
135
141
generator? . maximumSize = scaledSize
142
+ generator? . videoComposition = composition
136
143
var count = 0
137
144
138
145
let handler : AVAssetImageGeneratorCompletionHandler = { [ weak self] ( _, cgimage, _, result, error) in
0 commit comments