Wiem
Wiem

Reputation: 163

How to achieve infinite scrolling backgrounds in swift

I am trying to scroll a background infinitely in my game. My app crashes when I try to do it like this:

@IBAction func levelClicked(sender: AnyObject) {
  let screenSize: CGRect = UIScreen.mainScreen().bounds
  let screenHeight = screenSize.height
  let imageName = "levelBackground"
  let image = UIImage(named: imageName)
  imageView = UIImageView(image: image!)

  imageView.frame = CGRect (x: 0, y: 0, width: 5500, height: screenHeight)
  view.addSubview(imageView)

  timer = NSTimer.scheduledTimerWithTimeInterval(0.5, 
                                         target: self, 
                                       selector: Selector("moveBackground"), 
                                       userInfo: nil, 
                                        repeats: true)
}

func moveBackground() {
    imageView.frame = CGRect(x: imageView.frame.origin.x - 5,
                             y: imageView.origin.y,
                         width: 5500, 
                        height: UIScreen.mainScreen().bounds.height)
}

Here is my crash log:

2015-01-03 15:57:56.579 zombieSurvival[3395:708290] -[zombieSurvival.firstBuildingViewController moveBackground]: unrecognized selector sent to instance 0x15e7e150

2015-01-03 15:57:56.585 zombieSurvival[3395:708290] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[zombieSurvival.firstBuildingViewController moveBackground]: unrecognized selector sent to instance 0x15e7e150'

*** First throw call stack:

(0x29dad5f7 0x374e7c77 0x29db2abd 0x29db0999 0x29ce1b88 0x2aac1a45 0x29d73f07 0x29d73a89 0x29d71cf3 0x29cbeb31 0x29cbe943 0x31077051 0x2d2b46f1 0xccc04 0xccc40 0x37a83aaf)

libc++abi.dylib: terminating with uncaught exception of type NSException

Upvotes: 0

Views: 411

Answers (1)

user289841
user289841

Reputation:

I'm not an expert on swift, but it seems like this is not working out:

You are declaring moveBackground as a function inside levelClicked, but on your timer you are referencing self as target. The Class itself has no method moveBackground. It's only visible inside your function levelClicked.

Try to move the whole moveBackground out of levelClicked.

In order to make moveBackground work, i guess you have to give imageView a property.

@IBAction func levelClicked(sender: AnyObject) {
  let screenSize: CGRect = UIScreen.mainScreen().bounds
  let screenHeight = screenSize.height
  let imageName = "levelBackground"
  let image = UIImage(named: imageName)
  self.imageView = UIImageView(image: image!)

  self.imageView.frame = CGRect (x: 0, y: 0, width: 5500, height: screenHeight)
  view.addSubview(self.imageView)

  timer = NSTimer.scheduledTimerWithTimeInterval(0.5, 
                                         target: self, 
                                       selector: Selector("moveBackground"), 
                                       userInfo: nil, 
                                        repeats: true)
}

func moveBackground() {
    self.imageView.frame = CGRect(x: self.imageView.frame.origin.x - 5,
                                  y: self.imageView.origin.y,
                              width: 5500, 
                             height: UIScreen.mainScreen().bounds.height)
}

Upvotes: 1

Related Questions