2015-10-13 16 views
8

का उपयोग कर एक UIImage हस्तांतरण करने के लिए कैसे मैं एक UIImageसे अधिक WatchConnecitivity iPhone से एप्पल घड़ी को फोन पर कोई उपयोगकर्ता इंटरैक्शन के साथ स्थानांतरित कर सकते हैं, और केवल लोड क्योंकि घड़ी प्रोग्राम के रूप में यह मांग करता है। मुझे इसकी आवश्यकता है क्योंकि UIImage बनाने के लिए छवि प्रसंस्करण वॉचकिट एपीआई में अनुपलब्ध तर्क का उपयोग करता है, इसलिए इसे फोन से बनाया जाना चाहिए। मैं का उपयोग कर घड़ी कनेक्टिविटी के कुछ उदाहरण लगते हैघड़ी कनेक्टिविटी

func startSession() { 
    session?.delegate = self 
    session?.activateSession() 
} 

हालांकि, मैं सामान्य रूप में किट और iOS देखने के लिए नया हूँ और कैसे इस सत्र प्रबंधक का उपयोग करने, विशेष रूप से इसके बजाय उपकरण से घड़ी से जाने के लिए पर उलझन में हूँ उदाहरण के उदाहरणों में मैं दूसरे तरीके से देखता हूं। क्या कोई घड़ी के फोन पर UIImage पर कॉल करने के लिए घड़ी और फोन दोनों पर ऐसा करने का उदाहरण प्रदान कर सकता है?

उत्तर

10

अपने आईफोन और आपके ऐप्पल वॉच के बीच फ़ाइलों को स्थानांतरित करने के लिए आपको संचार को ठीक से संभालने के लिए WCSession का उपयोग करके वॉच कनेक्टिविटी का उपयोग करना चाहिए। WCSessionDelegate के didReceiveMessageData प्रतिनिधि विधि का उपयोग करके आप UIImageNSData भेज सकते हैं।

पहली चीज़ जो आपको जाननी चाहिए वह आपके UIImage से NSData और उपाध्यक्ष को परिवर्तित कर रहा है। आप इस के लिए निम्न कोड के लिए उपयोग कर सकते हैं:

PNG छवियाँ

let image = UIImage(named: "nameOfYourImage.jpg") 
let data = UIImagePNGRepresentation(image) 

JPG छवियाँ

let image = UIImage(named: "nameOfYourImage.jpg") 
let data = UIImageJPEGRepresentation(image, 1.0) 

तो फिर तुम WCSession उपयोग कर सकते हैं, तो में तरह संदेश भेजने के लिए निम्नलिखित तरीके:

ViewController.swift

class ViewController: UIViewController, WCSessionDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     if WCSession.isSupported() { 
      WCSession.defaultSession().delegate = self 
      WCSession.defaultSession().activateSession() 
     } 

     let image = UIImage(named: "index.jpg")! 

     let data = UIImageJPEGRepresentation(image, 1.0) 

     WCSession.defaultSession().sendMessageData(data!, replyHandler: { (data) -> Void in 
      // handle the response from the device 

     }) { (error) -> Void in 
       print("error: \(error.localizedDescription)") 

     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

InterfaceController.swift

import WatchKit 
import Foundation 
import WatchConnectivity 


class InterfaceController: WKInterfaceController, WCSessionDelegate { 

    override func awakeWithContext(context: AnyObject?) { 
     super.awakeWithContext(context) 

     // Configure interface objects here. 
    } 

    override func willActivate() { 
     // This method is called when watch view controller is about to be visible to user 
     super.willActivate() 

     if WCSession.isSupported() { 
      WCSession.defaultSession().delegate = self 
      WCSession.defaultSession().activateSession() 
     } 
    } 

    override func didDeactivate() { 
     // This method is called when watch view controller is no longer visible 
     super.didDeactivate() 
    } 

    func session(session: WCSession, didReceiveMessageData messageData: NSData, replyHandler: (NSData) -> Void) { 

     guard let image = UIImage(data: messageData) else { 
      return 
     } 

     // throw to the main queue to upate properly 
     dispatch_async(dispatch_get_main_queue()) { [weak self] in 
      // update your UI here 
     } 

     replyHandler(messageData) 
    } 
} 

ऊपर कोड जब आप खोलने ViewController यह UIImage भेजता में, ऊपर के उदाहरण ही है सीखने के उद्देश्यों के लिए, आपको इसे अधिक उचित तरीके से संभालना होगा अपनी परियोजना की जटिलता।

मुझे उम्मीद है कि यह आपकी मदद करेगा।

+1

'sendMessageData' केवल तभी काम करेगा जब घड़ी पर घड़ी सक्रिय है। यदि घड़ी ऐप नहीं चल रहा है, तो डेटा खो जाएगा। 'TranferUserInfo' का उपयोग करना अधिक सुरक्षित होगा, जो डेटा को कतारबद्ध करेगा और अगली बार इसे सक्रिय होने पर घड़ी ऐप द्वारा पढ़ा जाएगा। यदि आप केवल नवीनतम छवि में रुचि रखते हैं जिसे आपने घड़ी पर भेजा है, तो 'updateAplicationContext' का उपयोग करें। साथ ही, संचार के इन दो साधन पृष्ठभूमि में होते हैं, जो वांछित हो सकते हैं यदि आप बड़ी मात्रा में डेटा प्रसारित कर रहे हैं। – Drewf

+0

हां @ ड्रूफ आप सही हैं 'ट्रांसफर यूज़रइन्फो' अधिक सटीक है जब ऐप्पल वॉच पहुंच योग्य नहीं है क्योंकि पैकेज पृष्ठभूमि में डिलीवर किया जाता है लेकिन इसे कई बार भेजे जाने पर पृष्ठभूमि कतार में प्रतिस्थापन का असुविधाजनक होता है। फिर भी मैं प्रत्येक मामले के लिए अधिक जानकारी के साथ उत्तर अद्यतन कर दूंगा। –

+2

वर्प्रेशन गुणवत्ता के साथ प्रयोग करने योग्य वर्थ <1.0 जेपीईजी के लिए यदि आप वायर पर जा रहे यातायात की मात्रा को कम करने के लिए इससे दूर हो सकते हैं। –

0

आपको अपनी छवि को एनएसडीटा के रूप में स्थानांतरित करना होगा और फिर इसे घड़ी की तरफ डीकोड करना होगा। आप मेरे ब्लॉग पोस्ट पर एक नज़र डाल सकते हैं जहां मैंने इसी तरह के मामले को कवर किया था। http://eluss.github.io/AppleWatch_iPhone_data_transfer/

यह सत्र के साथ ऐसा करने का तरीका नहीं है क्योंकि मुझे इसके बारे में पता नहीं था, लेकिन शायद यह आपको संपूर्ण तर्क प्राप्त करने में मदद करेगा।

+0

हाँ, openParentApplication OS2 में उपलब्ध नहीं है, लेकिन मुझे लगता है कि मैं इस पर काम कर सकते हैं। फोन से घड़ी तक – modesitt

0

InterfaceController में, यदि आप WCSessionDelegate उपयोग करते हैं, विधि activationDidCompleteWith विस्तार करने के लिए याद रखें:

func session(_ session: WCSession, activationDidCompleteWith 
    activationState: WCSessionActivationState, error: Error?) { 

    } 
संबंधित मुद्दे