Your problem might be related to this (check the comments):
iOS7 : UIImageView Takes Forever to Appear
We don't know which commands [self.zBarReaderView start]
actually executes, but the documentation for ZBarReaderView says :
This is a barcode reader encapsulted in a UIView.
If it's laying out subview in UIViews, supposedly it's not safe to call "start" in a background thread, and while in iOS6 this worked it doesn't in iOS7 anymore, since the internals have changed.
Try to init the camera in the main thread, and see if it works:
dispatch_async(dispatch_get_main_queue(), ^{[self.zBarReaderView start];});