我有兩個問題,我懷疑是相互關聯的。應用程序沒有填滿設備屏幕,也沒有啓動屏幕自動旋轉
我有一個支持兩種風景方向的通用應用程序。我的應用程序啓動(使用界面生成器啓動屏幕),然後顯示SKScene。我有三大問題。
- 在iPad上,並且僅在iPad(iOS 8或9)上加載應用程序時,所有圖像都從中丟失,只剩下文本。此外,啓動屏幕的顯示面積比實際設備顯示器小約1釐米。這在iPhone上不是問題
- 在iPad上,並且僅在iPad(iOS 8或9)上出於某種原因,整個應用都會在其周圍出現邊框。我的應用佔用的屏幕區域比實際設備小。這在iPhone上不是問題。
- 我的應用程序被設置爲在「shouldAutoRotate()」函數內自動旋轉。不過,我無法啓動屏幕以正確的方向啓動。
我想你可能會有興趣看以下幾點:
摘錄的viewController:
import UIKit
import SpriteKit
import AVFoundation
import GameKit
import CoreData
import iAd
extension SKNode {
class func unarchiveFromFile(file : String) -> SKNode? {
if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!
var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameScene
archiver.finishDecoding()
return scene
} else {
return nil
}
}
}
class GameViewController: UIViewController, SceneTransitionDelegate, GKGameCenterControllerDelegate, ADBannerViewDelegate {
var audioPlayers:[AVAudioPlayer] = []
var sounds:[NSURL] = []
var nextSongDelay:NSTimer = NSTimer()
var currentSong:AVAudioPlayer = AVAudioPlayer()
var disp:CGFloat = 0
var starget:String = "HI"
var soundEffects:[AVAudioPlayer] = []
var rwidth:CGFloat = 0
var rheight:CGFloat = 0
var skView:SKView { return view as! SKView }
//var skView:SKView { return view as! SKView }
var iadp:Bool = false
var ar:Bool = true
var uord:Bool = false
override func viewDidLoad() {
super.viewDidLoad()
theEssence = self
launchAudio()
//mediumRectAdView!.delegate = self;
let defaults = NSUserDefaults.standardUserDefaults()
if (isAppAlreadyLaunchedOnce() == false)
{
defaults.setBool(false, forKey: "player")
}
if (defaults.boolForKey("Toothachepunlockiad") == true)
{
s_manualoverride.self = true
iAdBanner.hidden = true
}
// Configure the view.
let skView = self.view as! SKView
//skView.showsFPS = true
//skView.showsNodeCount = true
skView.showsPhysics = false
delli = self
authenticateLocalPlayer()
iAdBanner.frame = CGRectMake(0, self.view.frame.size.height, self.view.frame.width, 50)
iAdBanner.delegate = self
bannerVisible = false
iAdBanner.hidden = false
ar = true
self.shouldAutorotate()
transitionToScene(Menu.self)
}
//SceneTransitionDelegate method
func transitionToScene(sceneClass:Scene.Type) {
playing = false
var sizeRect = UIScreen.mainScreen().applicationFrame
var width = sizeRect.size.width
var height = sizeRect.size.height
let skView = self.view as! SKView
let scene = sceneClass(size: skView.bounds.size)
scene.size = CGSizeMake(width, height)
rwidth = width
rheight = height
swidth = width
sheight = height
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
scene.sceneDelegate = self
skView.presentScene(scene)
}
func transitionToScene(sceneClass: Scene.Type, transitionAnimation: SKTransition)
{
playing = false
var sizeRect = UIScreen.mainScreen().applicationFrame
var width = sizeRect.size.width
var height = sizeRect.size.height
let skView = self.view as! SKView
let scene = sceneClass(size: skView.bounds.size)
scene.size = CGSizeMake(width, height)
rwidth = width
rheight = height
swidth = width
sheight = height
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
scene.sceneDelegate = self
skView.presentScene(scene, transition: transitionAnimation)
}
override func shouldAutorotate() -> Bool {
return ar
}
override func supportedInterfaceOrientations() -> Int {
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
return Int(UIInterfaceOrientationMask.AllButUpsideDown.rawValue)
} else {
return Int(UIInterfaceOrientationMask.All.rawValue)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
if (playing == true)
{
println("MEMORY WARNING WE ARE DIEING")
//fatalError("MEMORY WARNING WE AARE ALL GOING TO DIE")
}
// Release any cached data, images, etc that aren't in use.
}
override func prefersStatusBarHidden() -> Bool {
return true
}
func bannerViewDidLoadAd(banner: ADBannerView!) {
if(bannerVisible == false) {
// Add banner Ad to the view
if(iAdBanner.superview == nil) {
self.view.addSubview(iAdBanner)
}
// Move banner into visible screen frame:
UIView.beginAnimations("iAdBannerShow", context: nil)
banner.frame = CGRectOffset(banner.frame, 0, -banner.frame.size.height)
UIView.commitAnimations()
bannerVisible = true
}
}
func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
if(bannerVisible == true) {
// Move banner below screen frame:
UIView.beginAnimations("iAdBannerHide", context: nil)
banner.frame = CGRectOffset(banner.frame, 0, banner.frame.size.height)
UIView.commitAnimations()
bannerVisible = false
}
}
func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
// Configure the view.
let skView = self.view as! SKView
skView.paused = true
return true
}
func bannerViewActionDidFinish(banner: ADBannerView!) {
let skView = self.view as! SKView
skView.paused = false
}
}
有些事情,我最近做可能會引發這樣的: 加入的織物崩潰報告 新增了自動旋轉功能
你可以查看是否在項目或目標的設置,莫名其妙僅針對iPhone設定? –