Compare commits

...

2 Commits

Author SHA1 Message Date
jonkykong 99ea9bb9ad Change to layer transform instead of view transform. 2018-05-23 17:03:45 -07:00
jonkykong 55776b4f9c Somewhat corrects layout problems on iOS 11. 2018-05-23 17:02:27 -07:00
+55 -19
View File
@@ -125,10 +125,10 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition {
return
}
let transform = view.transform
view.transform = .identity
let transform = view.layer.transform
view.layer.transform = CATransform3DIdentity
let translation = pan.translation(in: pan.view!)
view.transform = transform
view.layer.transform = transform
// do some math to translate this to a percentage based value
if !interactive {
@@ -166,9 +166,9 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition {
}
default:
interactive = false
view.transform = .identity
view.layer.transform = CATransform3DIdentity
let velocity = pan.velocity(in: pan.view!).x * direction
view.transform = transform
view.layer.transform = transform
if velocity >= 100 || velocity >= -50 && abs(distance) >= 0.5 {
// bug workaround: animation briefly resets after call to finishInteractiveTransition() but before animateTransition completion is called.
if ProcessInfo().operatingSystemVersion.majorVersion == 8 && percentComplete > 1 - CGFloat.ulpOfOne {
@@ -226,10 +226,10 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition {
let menuView = menuViewController?.view
let mainView = mainViewController?.view
mainView?.transform = .identity
mainView?.layer.transform = CATransform3DIdentity
mainView?.alpha = 1
mainView?.frame.origin = .zero
menuView?.transform = .identity
menuView?.layer.transform = CATransform3DIdentity
menuView?.frame.origin.y = 0
menuView?.frame.size.width = menuWidth
menuView?.frame.size.height = mainView?.frame.height ?? 0 // in case status bar height changed
@@ -248,7 +248,11 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition {
case .viewSlideOut:
menuView?.alpha = 1 - sideMenuManager.menuAnimationFadeStrength
menuView?.frame.origin.x = presentDirection == .left ? 0 : (mainView?.frame.width ?? 0) - menuWidth
menuView?.transform = CGAffineTransform(scaleX: sideMenuManager.menuAnimationTransformScaleFactor, y: sideMenuManager.menuAnimationTransformScaleFactor)
let f = sideMenuManager.menuAnimationTransformScaleFactor
menuView?.layer.transform = CATransform3D(m11: f, m12: 0, m13: 0, m14: 0,
m21: 0, m22: f, m23: 0, m24: 0,
m31: 0, m32: 0, m33: 1, m34: 0,
m41: 0, m42: 0, m43: 0, m44: 1)
case .viewSlideInOut:
menuView?.alpha = 1
@@ -295,11 +299,11 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition {
let mainView = mainViewController?.view
menuView?.alpha = 1
menuView?.transform = .identity
menuView?.layer.transform = CATransform3DIdentity
menuView?.frame.size.width = menuWidth
let size = SideMenuManager.appScreenRect.size
menuView?.frame.origin.x = presentDirection == .left ? 0 : size.width - menuWidth
mainView?.transform = .identity
mainView?.layer.transform = CATransform3DIdentity
mainView?.frame.size.width = size.width
let statusBarOffset = size.height - (menuView?.bounds.height ?? 0)
mainView?.bounds.size.height = size.height - max(statusBarOffset, 0)
@@ -310,11 +314,12 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition {
if statusBarOffset >= CGFloat.ulpOfOne {
statusBarFrame.size.height = statusBarOffset
}
tapView?.transform = .identity
tapView?.layer.transform = CATransform3DIdentity
tapView?.bounds = mainView!.bounds
statusBarView?.frame = statusBarFrame
statusBarView?.alpha = 1
var x: CGFloat = 0
switch sideMenuManager.menuPresentMode {
case .viewSlideOut, .viewSlideInOut:
@@ -323,7 +328,7 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition {
mainView?.layer.shadowOpacity = sideMenuManager.menuShadowOpacity
mainView?.layer.shadowOffset = CGSize(width: 0, height: 0)
let direction:CGFloat = presentDirection == .left ? 1 : -1
mainView?.frame.origin.x = direction * (menuView!.frame.width)
x = direction * (menuView!.frame.width)
case .menuSlideIn, .menuDissolveIn:
if sideMenuManager.menuBlurEffectStyle == nil {
@@ -332,17 +337,21 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition {
menuView?.layer.shadowOpacity = sideMenuManager.menuShadowOpacity
menuView?.layer.shadowOffset = CGSize(width: 0, height: 0)
}
mainView?.frame.origin.x = 0
}
if sideMenuManager.menuPresentMode != .viewSlideOut {
mainView?.transform = CGAffineTransform(scaleX: sideMenuManager.menuAnimationTransformScaleFactor, y: sideMenuManager.menuAnimationTransformScaleFactor)
if sideMenuManager.menuAnimationTransformScaleFactor > 1 {
tapView?.transform = mainView!.transform
}
let f = sideMenuManager.menuPresentMode != .viewSlideOut ? sideMenuManager.menuAnimationTransformScaleFactor : 1
if sideMenuManager.menuPresentMode == .viewSlideInOut || sideMenuManager.menuPresentMode == .viewSlideOut {
mainView?.alpha = 1 - sideMenuManager.menuAnimationFadeStrength
}
mainView?.layer.transform = CATransform3D(m11: f, m12: 0, m13: 0, m14: 0,
m21: 0, m22: f, m23: 0, m24: 0,
m31: 0, m32: 0, m33: 1, m34: 0,
m41: x, m42: 0, m43: 0, m44: 1)
if f > 1 {
tapView?.layer.transform = mainView!.layer.transform
}
return self
}
@@ -447,6 +456,18 @@ extension SideMenuTransition: UIViewControllerAnimatedTransitioning {
}
hideMenuStart()
if #available(iOS 11.0, *), sideMenuManager.menuAnimationTransformScaleFactor != 1.0 {
mainViewController?.additionalSafeAreaInsets.top = topView.safeAreaLayoutGuide.layoutFrame.minY
if sideMenuManager.menuAnimationTransformScaleFactor < 1.0 {
mainViewController?.additionalSafeAreaInsets.bottom = topView.frame.maxY - topView.safeAreaLayoutGuide.layoutFrame.maxY
}
}
} else {
if #available(iOS 11.0, *), sideMenuManager.menuAnimationTransformScaleFactor != 1.0 {
mainViewController?.additionalSafeAreaInsets.top = 0
mainViewController?.additionalSafeAreaInsets.bottom = 0
}
}
let animate = {
@@ -465,8 +486,23 @@ extension SideMenuTransition: UIViewControllerAnimatedTransitioning {
let viewControllerForPresentedMenu = self.mainViewController
if self.presenting {
if #available(iOS 11.0, *), self.sideMenuManager.menuAnimationTransformScaleFactor != 1.0 {
self.mainViewController?.additionalSafeAreaInsets.top = 0
self.mainViewController?.additionalSafeAreaInsets.bottom = 0
}
self.hideMenuComplete()
} else {
if #available(iOS 11.0, *), self.sideMenuManager.menuAnimationTransformScaleFactor != 1.0 {
let transform = topView.layer.transform
topView.layer.transform = CATransform3DIdentity
self.mainViewController?.additionalSafeAreaInsets.top = topView.safeAreaLayoutGuide.layoutFrame.minY
if self.sideMenuManager.menuAnimationTransformScaleFactor < 1.0 {
self.mainViewController?.additionalSafeAreaInsets.bottom = topView.frame.maxY - topView.safeAreaLayoutGuide.layoutFrame.maxY
}
topView.layer.transform = transform
}
self.presentMenuComplete()
}
@@ -495,7 +531,7 @@ extension SideMenuTransition: UIViewControllerAnimatedTransitioning {
tapView.bounds = container.bounds
tapView.center = topView.center
if self.sideMenuManager.menuAnimationTransformScaleFactor > 1 {
tapView.transform = topView.transform
tapView.layer.transform = topView.layer.transform
}
self.tapView = tapView
}