When setting the label's frame, you could use the imageView.frame as
reference.
Something like this:
let labelX = imageView.frame.origin.x
let labelY = imageView.frame.origin.y + imageView.frame.height
label = UILabel(frame: CGRectMake(labelX, labelY,
imageView.frame.width, 21)) // The last variable, 21, is the label's
height. Change as you see fit.

Executing in the background on iOS is problematic - There are specific
background modes for services like location and Bluetooth but no
general purpose background execution.
Probably the simplest approach is to store a timestamp in
NSUserDefaults when the last gem was spawned. Then, when the app is
relaunched you can compare the current time with this timestamp and
calculate how many additional

I think you're getting your view and your viewcontroller mixed up: a
ViewController controls things; a view just displays them. The
viewController tells the view what to display.
So, you want to connect your button to the viewController -- not the
view. And you don't need a custom view class or a delegate.
Set it up like this:
create a textField and a button
create an outlet for the textFie

Outlets will never be set in your init method, because the XIB
file/storyboard isn't loaded at that point.
It should work in viewDidLoad or viewWillAppear:. If it doesn't it
probably means your outlet link is broken. That's the most common
reason for code that works with outlets that seems like it should work
but doesn't.