Skip to content

Commit 0a9f110

Browse files
seedanteseedante
authored and
seedante
committed
rewrite
1 parent a537c9f commit 0a9f110

File tree

21 files changed

+244
-237
lines changed

21 files changed

+244
-237
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
//
2+
// PHFetchResultExtension.swift
3+
// SDEAlbumTransition
4+
//
5+
// Created by seedante on 15/10/15.
6+
// Copyright © 2015年 seedante. All rights reserved.
7+
//
8+
9+
import Photos
10+
11+
extension PHFetchResult{
12+
class func fetchPosterImageForAssetCollection(assetCollection: PHAssetCollection, targetSize: CGSize) -> UIImage?{
13+
14+
let fetchOptions = PHFetchOptions()
15+
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
16+
let fetchResult = PHAsset.fetchAssetsInAssetCollection(assetCollection, options: fetchOptions)
17+
18+
var posterImage: UIImage?
19+
fetchResult.enumerateObjectsAtIndexes(NSIndexSet(index: 0), options: NSEnumerationOptions.Concurrent){
20+
(assetItem: AnyObject!, index: Int, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
21+
22+
let requestOptions = PHImageRequestOptions()
23+
requestOptions.synchronous = true
24+
PHImageManager.defaultManager().requestImageForAsset(assetItem as! PHAsset, targetSize: targetSize, contentMode: .AspectFill, options: requestOptions, resultHandler:{
25+
(image: UIImage?, info: [NSObject: AnyObject]?) -> Void in
26+
posterImage = image
27+
})
28+
}
29+
30+
return posterImage
31+
}
32+
33+
class func fetchPosterImageForAssetCollection(assetCollection: PHAssetCollection, imageView: UIImageView, targetSize: CGSize){
34+
let fetchOptions = PHFetchOptions()
35+
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
36+
let fetchResult = PHAsset.fetchAssetsInAssetCollection(assetCollection, options: fetchOptions)
37+
38+
fetchResult.enumerateObjectsAtIndexes(NSIndexSet(index: 0), options: NSEnumerationOptions.Concurrent){
39+
(assetItem: AnyObject!, index: Int, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
40+
41+
PHImageManager.defaultManager().requestImageForAsset(assetItem as! PHAsset, targetSize: targetSize, contentMode: .AspectFill, options: nil, resultHandler:{
42+
(image, info) -> Void in
43+
imageView.image = image
44+
})
45+
}
46+
}
47+
48+
func fetchImageAtIndex(index: Int, targetSize: CGSize) -> UIImage?{
49+
if self.count > index{
50+
var fetchedImage: UIImage?
51+
self.enumerateObjectsAtIndexes(NSIndexSet(index: index), options: NSEnumerationOptions.Concurrent){
52+
(assetItem, index, stop) -> Void in
53+
54+
if let asset = assetItem as? PHAsset{
55+
let requestOptions = PHImageRequestOptions()
56+
requestOptions.synchronous = true
57+
58+
PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFill, options: requestOptions, resultHandler: {
59+
(image, info) in
60+
fetchedImage = image
61+
})
62+
}
63+
64+
}
65+
return fetchedImage
66+
}
67+
68+
return nil
69+
}
70+
71+
func fetchImageAtIndex(index: Int, imageView:UIImageView, targetSize: CGSize){
72+
if self.count > index{
73+
self.enumerateObjectsAtIndexes(NSIndexSet(index: index), options: NSEnumerationOptions.Concurrent){
74+
(assetItem, index, stop) -> Void in
75+
76+
if let asset = assetItem as? PHAsset{
77+
PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFill, options: nil, resultHandler: {
78+
(image, info) in
79+
imageView.image = image
80+
})
81+
}
82+
}
83+
}
84+
}
85+
86+
func getAssetAtIndex(index: Int) -> PHAsset?{
87+
if self.count > index{
88+
var asset: PHAsset?
89+
self.enumerateObjectsAtIndexes(NSIndexSet(index: index), options: NSEnumerationOptions.Concurrent, usingBlock: {
90+
(assetItem, _, _) in
91+
92+
asset = assetItem as? PHAsset
93+
})
94+
95+
return asset
96+
}
97+
98+
return nil
99+
}
100+
}

Classes/SDENavigationDelegate.swift

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// SDENavigationDelegate.swift
3+
// SDEAlbumTransition
4+
//
5+
// Created by seedante on 15/10/15.
6+
// Copyright © 2015年 seedante. All rights reserved.
7+
//
8+
9+
import UIKit
10+
11+
class SDENavigationDelegate: NSObject, UINavigationControllerDelegate {
12+
13+
//MARK: UINavigationControllerDelegate
14+
func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
15+
16+
let animator = SDETransitionAnimator(operation: operation)
17+
return animator
18+
}
19+
20+
}

ExploreAlbumOpenAnimation/SDETransitionAnimator.swift Classes/SDETransitionAnimator.swift

+17-8
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,44 @@
99
import UIKit
1010

1111
class SDETransitionAnimator: NSObject, UIViewControllerAnimatedTransitioning {
12-
13-
var delay: NSTimeInterval?
14-
var operationType: UINavigationControllerOperation?
12+
13+
private var operation: UINavigationControllerOperation
14+
15+
init(operation: UINavigationControllerOperation){
16+
self.operation = operation
17+
super.init()
18+
}
1519

1620
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
1721
return 0.5
1822
}
1923

2024
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
21-
switch operationType!{
25+
switch operation{
2226
case .Push:
2327
print("Push Transition Begin: \(NSDate())")
24-
//let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)
28+
let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)
2529
let toView = transitionContext.viewForKey(UITransitionContextToViewKey)
2630
transitionContext.containerView()?.addSubview(toView!)
27-
28-
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay! * Double(NSEC_PER_SEC)))
31+
32+
let toVC = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) as! UICollectionViewController
33+
34+
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.2 * Double(NSEC_PER_SEC)))
2935
dispatch_after(delayTime, dispatch_get_main_queue(), {
3036
print("Push Transition Finish: \(NSDate())")
37+
print(toVC.collectionView!.visibleCells())
3138
transitionContext.completeTransition(true)
3239
})
40+
41+
3342
case .Pop:
3443
print("Pop Transition Begin: \(NSDate())")
3544
let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)
3645
let toView = transitionContext.viewForKey(UITransitionContextToViewKey)
3746
transitionContext.containerView()?.insertSubview(toView!, belowSubview: fromView!)
3847
fromView?.backgroundColor = UIColor.clearColor()
3948

40-
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay! * Double(NSEC_PER_SEC)))
49+
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.6 * Double(NSEC_PER_SEC)))
4150
dispatch_after(delayTime, dispatch_get_main_queue(), {
4251
print("Pop Transition Finish: \(NSDate())")
4352
transitionContext.completeTransition(true)

ExploreAlbumOpenAnimation/Assets.xcassets/AppIcon.appiconset/Contents.json

-68
This file was deleted.

ExploreAlbumOpenAnimation/SDEFetchResult.swift

-83
This file was deleted.

0 commit comments

Comments
 (0)