Created
May 11, 2015 16:00
-
-
Save t-kashima/b19e11528b729b004f07 to your computer and use it in GitHub Desktop.
MutipeerConnectivityを使った画像のやりとり
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// ViewController.swift | |
// Multipeer | |
// | |
// Created by Kashima Takumi on 2015/05/11. | |
// Copyright (c) 2015年 UNUUU FOUNDATION. All rights reserved. | |
// | |
import UIKit | |
import MultipeerConnectivity | |
class ViewController: UIViewController, | |
MCBrowserViewControllerDelegate, | |
MCSessionDelegate, | |
UINavigationControllerDelegate, | |
UIImagePickerControllerDelegate { | |
let serviceType = "LCOC-Chat" | |
var browser : MCBrowserViewController! | |
var assistant : MCAdvertiserAssistant! | |
var session : MCSession! | |
var peerID: MCPeerID! | |
var picker: UIImagePickerController! | |
var selectedImage: UIImage? | |
@IBOutlet var imageView: UIImageView! | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
// Do any additional setup after loading the view, typically from a nib. | |
self.peerID = MCPeerID(displayName: UIDevice.currentDevice().name) | |
self.session = MCSession(peer: peerID) | |
self.session.delegate = self | |
// create the browser viewcontroller with a unique service name | |
self.browser = MCBrowserViewController(serviceType:serviceType, | |
session:self.session) | |
self.browser.delegate = self; | |
self.assistant = MCAdvertiserAssistant(serviceType:serviceType, | |
discoveryInfo:nil, session:self.session) | |
// tell the assistant to start advertising our fabulous chat | |
self.assistant.start() | |
} | |
@IBAction func showPhotoLibrary(sender: AnyObject) { | |
self.picker = UIImagePickerController() | |
self.picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary | |
self.picker.delegate = self | |
self.presentViewController(self.picker, animated: true, completion: nil) | |
} | |
override func didReceiveMemoryWarning() { | |
super.didReceiveMemoryWarning() | |
// Dispose of any resources that can be recreated. | |
} | |
@IBAction func showBrowse(sender: AnyObject) { | |
// Show the browser view controller | |
self.presentViewController(self.browser, animated: true, completion: nil) | |
} | |
@IBAction func sendImage(sender: AnyObject) { | |
// Bundle up the image, and send it off to all | |
// connected peers | |
if self.selectedImage == nil { | |
return | |
} | |
let data = UIImageJPEGRepresentation(self.selectedImage, 1.0) | |
var error : NSError? | |
self.session.sendData(data, toPeers: self.session.connectedPeers, | |
withMode: MCSessionSendDataMode.Reliable, error: &error) | |
if error != nil { | |
print("Error sending data: \(error?.localizedDescription)") | |
} | |
} | |
func browserViewControllerDidFinish(browserViewController: MCBrowserViewController!) { | |
// Called when the browser view controller is dismissed (ie the Done | |
// button was tapped) | |
self.dismissViewControllerAnimated(true, completion: nil) | |
} | |
func browserViewControllerWasCancelled(browserViewController: MCBrowserViewController!) { | |
// Called when the browser view controller is cancelled | |
self.dismissViewControllerAnimated(true, completion: nil) | |
} | |
func session(session: MCSession!, didReceiveData data: NSData!, fromPeer peerID: MCPeerID!) { | |
// Called when a peer sends an NSData to us | |
// This needs to run on the main queue | |
dispatch_async(dispatch_get_main_queue()) { | |
let receivedImage = UIImage(data: data) | |
self.imageView.image = receivedImage | |
} | |
} | |
// The following methods do nothing, but the MCSessionDelegate protocol | |
// requires that we implement them. | |
func session(session: MCSession!, didStartReceivingResourceWithName resourceName: String!, fromPeer peerID: MCPeerID!, withProgress progress: NSProgress!) { | |
// Called when a peer starts sending a file to us | |
} | |
func session(session: MCSession!, didFinishReceivingResourceWithName resourceName: String!, fromPeer peerID: MCPeerID!, atURL localURL: NSURL!, withError error: NSError!) { | |
// Called when a file has finished transferring from another peer | |
} | |
func session(session: MCSession!, didReceiveStream stream: NSInputStream!, | |
withName streamName: String!, fromPeer peerID: MCPeerID!) { | |
// Called when a peer establishes a stream with us | |
} | |
func session(session: MCSession!, peer peerID: MCPeerID!, didChangeState state: MCSessionState) { | |
// Called when a connected peer changes state (for example, goes offline) | |
} | |
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { | |
if info[UIImagePickerControllerOriginalImage] != nil { | |
// 選択された画像 | |
self.selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage | |
} | |
// アルバムビューを閉じる | |
picker.dismissViewControllerAnimated(true, completion: { | |
// 画像を表示する | |
self.imageView.image = self.selectedImage | |
}) | |
} | |
func imagePickerControllerDidCancel(picker: UIImagePickerController) { | |
// アルバムビューを閉じる | |
picker.dismissViewControllerAnimated(true, completion: nil) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment