OSDN Git Service

素早く7隻の艦隊を含む艦隊を切り替えると表示がおかしくなる問題を修正
authormasakih <masakih@users.sourceforge.jp>
Fri, 24 Nov 2017 11:47:48 +0000 (20:47 +0900)
committermasakih <masakih@users.sourceforge.jp>
Fri, 24 Nov 2017 11:47:48 +0000 (20:47 +0900)
KCD/BroserWindowController.swift
KCD/FleetViewController.swift

index 9ff0911..89f4a99 100644 (file)
@@ -414,6 +414,7 @@ extension BroserWindowController {
         newController.shipOrder = fleetViewController.shipOrder
         replace(fleetViewController.view, with: newController)
         fleetViewController = newController
+        fleetViewController.delegate = self
     }
     
     private func windowHeightForFleetViewPosition(position newPosition: FleetViewPosition) -> CGFloat {
@@ -552,9 +553,8 @@ extension BroserWindowController: FleetViewControllerDelegate {
         guard self.fleetViewController == fleetViewController else { return }
         
         if isExtShpMode && !showsExtShip {
-            // hide
-            print("hide ext ship")
             
+            // hide
             let diffHeight = fleetViewController.shipViewSize.height
             
             var iFrame = informations.frame
@@ -571,8 +571,6 @@ extension BroserWindowController: FleetViewControllerDelegate {
         } else if !isExtShpMode && showsExtShip {
             
             //show
-            print("show ext shp")
-            
             let diffHeight = fleetViewController.shipViewSize.height
             
             var iFrame = informations.frame
index 9094045..e96feff 100644 (file)
@@ -130,6 +130,7 @@ final class FleetViewController: NSViewController {
     }
     
     var extDetail: ShipDetailViewController?
+    var extShipAnimating: Bool = false
     weak var delegate: FleetViewControllerDelegate?
     
     var enableAnimation: Bool = false
@@ -489,45 +490,69 @@ extension FleetViewController {
     
     private func showExtShip() {
         
-        print("show ext shp")
-        
         guard type == .detailViewType else { return }
         guard extDetail == nil else { return }
         guard let _ = fleet?[6] else { return }
         
-        extDetail = ShipDetailViewController(type: .full)
-        guard let extDetail = extDetail else { return }
-        
-        extDetail.title = "7"
-        extDetail.view.autoresizingMask = [.minXMargin]
+        if extShipAnimating {
+            DispatchQueue.main.async(execute: showExtShip)
+            return
+        }
         
-        let width = extDetail.view.frame.width - 1
-        var frame = view.frame
-        frame.size.width += width
+        extShipAnimating = true
         
-        extDetail.view.frame = details[5].view.frame
-        view.addSubview(extDetail.view, positioned: .below, relativeTo: details[5].view)
-        view.animator().frame = frame
+        NSAnimationContext.runAnimationGroup({ _ in
+            
+            extDetail = ShipDetailViewController(type: .full)
+            guard let extDetail = extDetail else { return }
+            
+            extDetail.title = "7"
+            extDetail.view.autoresizingMask = [.minXMargin]
+            
+            let width = extDetail.view.frame.width - 1
+            var frame = view.frame
+            frame.size.width += width
+            
+            extDetail.view.frame = details[5].view.frame
+            view.addSubview(extDetail.view, positioned: .below, relativeTo: details[5].view)
+            view.animator().frame = frame
+            
+        }, completionHandler: { [weak self] in
+            
+            self?.extShipAnimating = false
+        })
         
         delegate?.changeShowsExtShip(self, showsExtShip: true)
     }
     
     private func hideExtShip() {
         
-        print("hide ext ship")
         guard type == .detailViewType else { return }
         
-        guard let extDetail = extDetail else { return }
+        if extShipAnimating {
+            DispatchQueue.main.async(execute: hideExtShip)
+            return
+        }
         
-        var frame = view.frame
-        frame.size.width -= extDetail.view.frame.width - 1
-        view.animator().frame = frame
+        guard let extDetail = extDetail else { return }
         
-        ships.removeLast()
+        extShipAnimating = true
         
-        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
+        NSAnimationContext.runAnimationGroup({ _ in
+            
+            var frame = view.frame
+            frame.size.width -= extDetail.view.frame.width - 1
+            view.animator().frame = frame
+            
+            ships.removeLast()
+            
+        }, completionHandler: { [weak self] in
+            
             extDetail.view.removeFromSuperview()
-        }
+            
+            self?.extShipAnimating = false
+            
+        })
         
         self.extDetail = nil
         
@@ -535,9 +560,7 @@ extension FleetViewController {
     }
     
     private func checkExtShip() {
-        
-        fleet.map { print($0) }
-        
+                
         guard type == .detailViewType else { return }
         
         if fleet?[6] != nil {