आईओएस 10.0 में और बाद में, आप AVCaptureDevice
के माध्यम से पुनरावृति की जरूरत नहीं है। स्थिति के आधार पर कैमरा खोजने के लिए devices
(या devicesWithMediaType
)। (वास्तव में, उन दोनों एपीआई को आईओएस 10 में बहिष्कृत किया गया है, और आईफोन 7 प्लस, आईफोन 8 प्लस, या आईफोन एक्स पर उपलब्ध उपकरणों का पूरा सेट वापस नहीं लौटाएं।)
यदि आपको बस एक ढूंढना है सरल विशेषताओं (जैसे फ्रंट-फेस कैमरा जो वीडियो शूट कर सकते हैं) के आधार पर एकल डिवाइस, बस AVCaptureDevice
का उपयोग करें। defaultDevice(withDeviceType:mediaType:position:)
। उदाहरण के लिए:
guard let device = AVCaptureDevice.defaultDevice(
withDeviceType: .builtInWideAngleCamera,
mediaType: AVMediaTypeVideo,
position: .front)
else { fatalError("no front camera. but don't all iOS 10 devices have them?")
// then use the device: captureSession.addInput(device) or whatever
वास्तव में अधिकांश उपयोग मामलों के लिए यह सब कुछ है।
devices
सरणी के माध्यम से पुनरावृत्ति की पुरानी पद्धति के लिए एक स्थानापन्न के रूप में भी AVCaptureDeviceDiscoverySession
नहीं है। हालांकि, अधिकांश चीजें जिन्हें आप आमतौर पर devices
सरणी के माध्यम से पुन: सक्रिय करते हैं, उन्हें defaultDevice(withDeviceType:mediaType:position:)
विधि का उपयोग करके पाया जा सकता है, ताकि आप इसका उपयोग भी कर सकें और कम कोड लिख सकें।
ऐसे मामले जहां AVCaptureDeviceDiscoverySession
उपयोग करने लायक है, कम आम, अधिक जटिल मामले हैं: कहें कि आप एक निश्चित फ्रेम दर का समर्थन करने वाले सभी उपकरणों को ढूंढना चाहते हैं, या यह देखने के लिए महत्वपूर्ण मूल्य का उपयोग करना है कि उपलब्ध डिवाइसों का सेट कब बदलता है ।
वैसे, एप्पल ने आईओएस 10/स्विफ्ट 3 तस्वीर पर कब्जा करने के लिए प्रणाली a guide और कुछ sample code कि दोनों इन API के लिए वर्तमान सर्वोत्तम प्रथाओं दिखाने है।
ऊपर प्रदान की तेजी कोड का उपयोग करना, मैं स्विफ्ट 2 आईओएस 9 के साथ इस कोड का इस्तेमाल किया; मुझे केवल ब्रेक को हटाना पड़ा क्योंकि उसने मुझे संकलन त्रुटि दी थी। महान स्रोत यहाँ! –