Skip to content

Instantly share code, notes, and snippets.

@t-kashima
Created May 11, 2015 16:00
Show Gist options
  • Save t-kashima/b19e11528b729b004f07 to your computer and use it in GitHub Desktop.
Save t-kashima/b19e11528b729b004f07 to your computer and use it in GitHub Desktop.
MutipeerConnectivityを使った画像のやりとり
//
// 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