ios - What are possible reasons for the page curl transition to hang at the end of the animation? -


i using uipageviewcontroller in ios app transition between view controllers. view controllers each contain skview , nothing else.

the page curl works fine, can see in gif attached. @ end of animation there strange shadow @ border of screen.

gif of page curl

shadow @ end

here relevant source code, requested:

this modelcontroller

import uikit  class modelcontroller: nsobject, uipageviewcontrollerdatasource {  var pageisanimating=false let rootviewcontroller:rootviewcontroller!  var nextviewcontroller:bookpageviewcontroller? var prevviewcontroller:bookpageviewcontroller?  var storyboard:uistoryboard  init(rootviewcontroller:rootviewcontroller) {      self.rootviewcontroller=rootviewcontroller      let storyboardname = "main";     storyboard = uistoryboard(name: storyboardname, bundle: nil)        super.init()     nextviewcontroller = viewcontrolleratindex(1)  }   func preloadviewcontrollers(index: int, forward:bool, oldviewcontroller: uiviewcontroller) {     if(index+1<static.bookpages.count)     {         print("preloading next: "+(index+1).description)         if(!forward)         {             print("taking oldviewcontroller")             nextviewcontroller = oldviewcontroller as? bookpageviewcontroller         }         else         {             nextviewcontroller = viewcontrolleratindex(index+1)         }      }     if(index-1 >= 0)     {         print("preloading prev: "+(index-1).description)          if(forward)         {             print("taking oldviewcontroller")             prevviewcontroller = oldviewcontroller as? bookpageviewcontroller         }         else         {             prevviewcontroller = viewcontrolleratindex(index-1)         }          print("after preloading prev")     } }   func viewcontrolleratindex(index: int) -> bookpageviewcontroller {     let viewcontroller = storyboard.instantiateviewcontrollerwithidentifier("bookpageviewcontroller") as! bookpageviewcontroller     viewcontroller.bookpage = modelcontroller.static.bobostory.bookpages[index]     viewcontroller.index=index     viewcontroller.rootviewcontroller=rootviewcontroller     viewcontroller.loadresources()     return viewcontroller }  func pageviewcontroller(pageviewcontroller: uipageviewcontroller, viewcontrollerbeforeviewcontroller viewcontroller: uiviewcontroller) -> uiviewcontroller? {     print("viewcontrollerbefore")     let currentindex=(viewcontroller as! bookpageviewcontroller).index      if pageisanimating {         return nil     }      if (currentindex == 0) {         return nil     }      let returnviewcontroller=prevviewcontroller     prevviewcontroller=nil      return returnviewcontroller }  func pageviewcontroller(pageviewcontroller: uipageviewcontroller, viewcontrollerafterviewcontroller viewcontroller: uiviewcontroller) -> uiviewcontroller? {     print("viewcontrollerafter")     let currentindex=(viewcontroller as! bookpageviewcontroller).index      if pageisanimating {         return nil     }      if currentindex == modelcontroller.static.bobostory.bookpages.count-1     {         return nil     }      let returnviewcontroller=nextviewcontroller     nextviewcontroller=nil      return returnviewcontroller }     } 

this rootviewcontroller:

import uikit  class rootviewcontroller: uiviewcontroller, uipageviewcontrollerdelegate {      var pageviewcontroller: uipageviewcontroller?     var recordings:[int:record]!     var currentrecord=0     var nextindex:int = 0     var currentindex:int = 0      override func viewwillappear(animated: bool) {          self.navigationcontroller?.setnavigationbarhidden(true, animated: animated);         setscrollenabled(true)          super.viewwillappear(animated);     }      func setviewcontrollers()     {          let startingviewcontroller: bookpageviewcontroller = self.modelcontroller.viewcontrolleratindex(0)         let viewcontrollers: [uiviewcontroller] = [startingviewcontroller]         self.pageviewcontroller!.setviewcontrollers(viewcontrollers [uiviewcontroller], direction: .forward, animated: false, completion: {done in })     }      override func prepareforsegue(segue: uistoryboardsegue, sender: anyobject!) {         if (segue.identifier == "roottoparentmodeviewcontroller") {             let parentmodeviewcontroller = segue.destinationviewcontroller as! parentmodeviewcontroller             parentmodeviewcontroller.rootviewcontroller=self         }     }      override func viewdidload() {         super.viewdidload()          uiapplication.sharedapplication().setstatusbarhidden(false, withanimation: uistatusbaranimation.none)         recordings=datamanager.sharedinstance.getrecordings()           // additional setup after loading view, typically nib.         // configure page view controller , add child view controller.         self.pageviewcontroller = uipageviewcontroller(transitionstyle: .pagecurl, navigationorientation: .horizontal, options: nil)          self.pageviewcontroller!.delegate = self          setviewcontrollers()          self.pageviewcontroller!.datasource = self.modelcontroller          self.addchildviewcontroller(self.pageviewcontroller!)         self.view.addsubview(self.pageviewcontroller!.view)          self.pageviewcontroller!.view.frame=self.view.bounds          self.pageviewcontroller!.didmovetoparentviewcontroller(self)          // add page view controller's gesture recognizers book view controller's view gestures started more easily.         //self.view.gesturerecognizers = self.pageviewcontroller!.gesturerecognizers           self.view.gesturerecognizers = self.pageviewcontroller!.gesturerecognizers           // find tap gesture recognizer can remove it!         recognizer in self.pageviewcontroller!.gesturerecognizers {             if ( recognizer uitapgesturerecognizer ) {                 self.view.removegesturerecognizer(recognizer)                 self.pageviewcontroller?.view.removegesturerecognizer(recognizer)                 break;             }          }      }      func reloadrecordings()     {         recordings=datamanager.sharedinstance.getrecordings()         setviewcontrollers()     }      func setscrollenabled(enabled:bool) {         recognizer in self.pageviewcontroller!.gesturerecognizers {             if(recognizer uipangesturerecognizer)             {                 (recognizer as! uipangesturerecognizer).enabled=enabled              }          }     }      func getcurrentrecord() -> int     {         return currentrecord     }        func getcurrentlanguage() -> record.recordlanguage     {         return recordings[currentrecord]!.language     }      override func didreceivememorywarning() {         super.didreceivememorywarning()         // dispose of resources can recreated.     }      var modelcontroller: modelcontroller {         // return model controller object, creating if necessary.         // in more complex implementations, model controller may passed view controller.         if _modelcontroller == nil {             _modelcontroller = modelcontroller(rootviewcontroller: self)         }         return _modelcontroller!     }      var _modelcontroller: modelcontroller? = nil      // mark: - uipageviewcontroller delegate methods      func pageviewcontroller(pageviewcontroller: uipageviewcontroller, spinelocationforinterfaceorientation orientation: uiinterfaceorientation) -> uipageviewcontrollerspinelocation {         return .min     }        func pageviewcontroller(pageviewcontroller: uipageviewcontroller, willtransitiontoviewcontrollers pendingviewcontrollers: [uiviewcontroller]) {         print("willtransitiontoviewcontroller")         self.modelcontroller.pageisanimating=true         self.nextindex=(pendingviewcontrollers.first as! bookpageviewcontroller).index!     }      func pageviewcontroller(pageviewcontroller: uipageviewcontroller, didfinishanimating finished: bool, previousviewcontrollers: [uiviewcontroller], transitioncompleted completed: bool) {         if(finished)         {             self.modelcontroller.pageisanimating=false         }          if (completed){             var forward=false             if(self.currentindex<self.nextindex)             {                 forward=true             }             self.currentindex=self.nextindex             dispatch_async(dispatch_get_global_queue(dispatch_queue_priority_low, 0), {                 self.modelcontroller.preloadviewcontrollers(self.currentindex, forward: forward, oldviewcontroller: previousviewcontrollers[0])                  });            }// turn either finished or aborted         print("didfinishanimating")       }       override func prefersstatusbarhidden() -> bool {         return true     }   } 

and view controller shown pageviewcontroller:

import uikit import spritekit  class bookpageviewcontroller: uiviewcontroller  {      var bookpage:bookpage?     var index:int?     var rootviewcontroller:rootviewcontroller?     @iboutlet var mainview: skview!      var scene:bookpageskscene?     var storyimagespritenode:skspritenode?     var flagspritenodes=[int:skspritenode]()      required init?(coder adecoder: nscoder) {         super.init(coder: adecoder)     }        func loadresources()     {         print("loadresources: "+index!.description)         storyimagespritenode = skspritenode(imagenamed: bookpage!.pageimage)         (id, record) in rootviewcontroller!.recordings {             flagspritenodes[id]=skspritenode(texture: sktexture(image: record.getrecordimage()!))         }     }         override func viewdidload() {         super.viewdidload()          print("viewdidload: "+index!.description)           scene=bookpageskscene(bookpage: bookpage!, size: self.mainview.frame.size, parentviewcontroller: rootviewcontroller!, storyimagespritenode: storyimagespritenode!, flagspritenodes: flagspritenodes);         /* set scale mode scale fit window */          scene!.scalemode = .resizefill         scene!.backgroundcolor = skcolor.whitecolor();            // configure view.         mainview.showsfps = false         mainview.showsnodecount = false          /* sprite kit applies additional optimizations improve rendering performance */         mainview.ignoressiblingorder = true           mainview.presentscene(scene)      }       override func shouldautorotate() -> bool {         return true     }      override func prefersstatusbarhidden() -> bool {         return true;     }       override func didreceivememorywarning() {         super.didreceivememorywarning()         // release cached data, images, etc aren't in use.     }    } 

one of possible reasons page curl animation hang @ end of animation in uipageviewcontroller be:

if doing heavy calculation in viewdidload() function of uiviewcontrollers, if passing data uiwebview or html string uitextview/uilabel in viewdidload() function.. move heavy calculation viewdidappear() function. maybe you. happy coding!


Comments

Post a Comment

Popular posts from this blog

linux - Does gcc have any options to add version info in ELF binary file? -

java - Are there any classes that implement javax.persistence.Parameter<T>? -

android - send complex objects as post php java -