質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

405閲覧

swift 「アクティビティビュー」を表示したい

TRON1216.

総合スコア37

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1グッド

0クリップ

投稿2018/05/16 12:56

iOSアプリ開発を始めました。立ち位置のアプリを作りたく、マス目とラベルを描き、ラベルを自由に動かせるようにしました。次の目標としては、そのデータ(立ち位置の画面)を保存したりしたいです。そのためにバーボタンを作り、そこにアクティビティビューを表示したりSaveアイコンやゴミ箱アイコンを表示させました。シミュレータを起動させたところ、アイコンの表示はできるのですがクリックしてもアクティヴィティビューが出てきません。おそらくUIActivityControllerの中のactivityItemsの引数が違うのだと思います。ですが、何を書けば良いか分からず今はmainViewにしています。どなたか教えていただけないでしょうか?

import UIKit class ViewController: UIViewController { var label:UILabel! //labelの型が無を含んだUILabelクラスであることを示す(オプショナル型)なんで無がいるの?//型を明示的に指定するvar<変数名>:<型> //型はクラスにもなる、? var myLabel: UILabel! var turn = 1 //初期値1の変数turn @IBOutlet weak var mainView: UIView! @IBAction func showActivityView(_ sender: UIBarButtonItem) { let controller = UIActivityViewController(activityItems: [mainView/*viewDidLoad()*/], applicationActivities: nil) //UIActivityViewControllerはメールやツイッター、アイクラウド共有などの機能一覧画面を表示するクラス self.present(controller, animated: true, completion: nil) } @IBAction func save(_ sender: UIBarButtonItem) { } @IBAction func Trash(_ sender: UIBarButtonItem) { } override func viewDidLoad() {//親クラスを編集することなく、子クラスの中で親クラスのメソッドを上書きできる super.viewDidLoad() // ->背景色を白色に変更する self.view.backgroundColor = UIColor.white // Do any additional setup after loading the view, typically from a nib. let (screenWidth, screenHeight) = (self.view.bounds.width, self.view.bounds.height) let (width, height) = (screenWidth/16, screenHeight/7) //1マスあたりの幅と高さを指定 for i in 0 ..< 16{ for j in 0 ..< 5{ //jが縦、iが横(ただし、デバイスを立てで見たとき) let label1 = UILabel(frame: CGRectMake(width*CGFloat(i),height*CGFloat(j+1),width,height)) //jだけにすると、最上段の空白がなくなる(番号をつけたいので空白で良い) label1/*button*/.layer.borderColor = UIColor.gray/*black*/.cgColor //線の色を指定するプロパティ label1/*button*/.layer.borderWidth = 1.0 //線幅を指定するプロパティ self.view.addSubview(label1/*button*/)//コメントアウトするとマス目がなくなったから必要っぽい } } print("マス目がViewに追加されました") // Labelを生成. myLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 40, height: 40)) myLabel.text = "1" myLabel.textAlignment = NSTextAlignment.center //画面長い方の中心に来るように設定違うかも myLabel.backgroundColor = UIColor.red myLabel.layer.masksToBounds = true myLabel.center = self.view.center //画面の短い方の中心に来るように設定 myLabel.layer.cornerRadius = 20.0 // Labelをviewに追加. self.view.addSubview(myLabel) print("駒がViewに追加されました") func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect{ return CGRect(x:x,y:y,width:width,height:height) } /* タッチを感知した際に呼ばれるメソッド. */ override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { //print("touchesBegan") print("touchesBeganが呼ばれました") // Labelアニメーション. UIView.animate(withDuration: 0.06, // アニメーション中の処理. animations: { () -> Void in // 縮小用アフィン行列を作成する. self.myLabel.transform = CGAffineTransform(scaleX: 0.9, y: 0.9) }) { (Bool) -> Void in } } /* ドラッグを感知した際に呼ばれるメソッド. (ドラッグ中何度も呼ばれる) */ override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { print("touchesMovedが呼ばれました") // タッチイベントを取得. let aTouch: UITouch = touches.first! // 移動した先の座標を取得. let location = aTouch.location(in: myLabel/*self.view*/) // 移動する前の座標を取得. let prevLocation = aTouch.previousLocation(in: myLabel/*self.view*/) // CGRect生成. var myFrame: CGRect = myLabel/*self.view*/.frame // ドラッグで移動したx, y距離をとる. let deltaX: CGFloat = location.x - prevLocation.x let deltaY: CGFloat = location.y - prevLocation.y // 移動した分の距離をmyFrameの座標にプラスする. myFrame.origin.x += deltaX myFrame.origin.y += deltaY // frameにmyFrameを追加. myLabel/*self.view*/.frame = myFrame } /* 指が離れたことを感知した際に呼ばれるメソッド. */ override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { print("touchesEndedが呼ばれました") // Labelアニメーション. UIView.animate(withDuration: 0.1, // アニメーション中の処理. animations: { () -> Void in // 拡大用アフィン行列を作成する. self.myLabel.transform = CGAffineTransform(scaleX: 0.4, y: 0.4) // 縮小用アフィン行列を作成する. self.myLabel.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) }) { (Bool) -> Void in } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

イメージ説明
なお、上記のソースコードの中について、目盛の番号を描くコードは省略してあります。

Do_you_1isten👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

storyboard上のボタンと@IBAction func showActivityView(_ sender: UIBarButtonItem)の接続はできていますでしょうか?
私の環境では接続できていればアクションを呼び出すことができていますが、いかがでしょうか?

イメージ説明

UIActivityViewControllerの使い方
https://yuu.1000quu.com/how_to_use_uiactivityviewcontroller

投稿2018/05/16 21:25

newmt

総合スコア1277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TRON1216.

2018/05/17 01:58

返信ありがとうございます。一度ストーリーボードとswiftを繋げたのですが再びストーリーボードのバーボタンアイテムを削除しました。swiftに@IBActionが書かれていればストーリーボードのアイテムとつながると間違った理解をしていました。丁寧にありがとうございました^ ^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問