前提・実現したいこと
Navigationbarの右側に配置したボタンを押すことでPDFを作成できるようにしているのですが、その処理が重いためかボタンを押すとしばらく動かせなくなります。
そこでインジゲーターを表示させるようにしたいのですが、そのようにコーディングしてもPDF作成の処理が先に施され、インジゲーターの表示が後になってしまいます。
ボタンはstoryboardで以下のように配置しています。
ボタンを押すとインジゲーター表示、PDF作成、画面遷移を行いたいと思っています。
ボタンをひとつにするとインジゲーターは表示されるようになったのですが、PDF作成や画面遷移をしなくなりました。
Navigationbarのところに配置したボタンがゆえに処理が上手くいってないのかなと思うのですが、、、ご教授よろしくお願いいたします。
該当のソースコード
インジゲーター表示させっぱなしのコード
swift
1class ViewController2: UIViewController, UIGestureRecognizerDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate { 2 var ActivityIndicator: UIActivityIndicatorView! 3 override func viewDidLoad() { 4 super.viewDidLoad() 5 6 7 // ActivityIndicatorを作成&中央に配置 8 ActivityIndicator = UIActivityIndicatorView() 9 ActivityIndicator.frame = CGRect(x: 0, y: 0, width: 50, height: 50) 10 ActivityIndicator.center = self.view.center 11 12 // クルクルをストップした時に非表示する 13 ActivityIndicator.hidesWhenStopped = true 14 15 // 色を設定 16 ActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray 17 18 //Viewに追加 19 self.view.addSubview(ActivityIndicator) 20 21 } 22 23 @IBAction func push(_ sender: Any) { 24 print("push") 25 26 // クルクルスタート 27 ActivityIndicator.startAnimating() 28 29 30 31 let x = self.getimage.frame.origin.x 32 let y = self.getimage.frame.origin.y 33 UserDefaults.standard.set(y, forKey: "uekaranokyori") 34 let imageHeight = self.screenWidth * 210.0 / 143.5 35 36 37 ///////////////////////////////////////////////////////////VIEWのため変更 38 39 40 41 //VIEW.frame = pdfImageView.bounds 42 43 let pdfData = NSMutableData() 44 45 //binsenの画像 46 let binhoge = UserDefaults.standard.integer(forKey: "selectedTag") 47 let bin: UIImage = UIImage(named:"binsen(binhoge)-1.jpg")! 48 //元画像の大きさのUIImageViewを作る 49 let pdfImageView = UIImageView(image: bin) 50 51 52 //どんな大きさ、位置のものを表示するのか 53 //UIGraphicsBeginImageContextWithOptions(getimage.frame.size, false, 0.0) 54 let gamen:CGRect = CGRect(x: 0, y: 0, width: self.screenWidth, height: imageHeight) 55 UIGraphicsBeginPDFContextToData(pdfData, pdfImageView.bounds, nil) 56 print("gamen = (gamen)") 57 ////////CGRect(x: 0, y: 0, width: screenWidth, height: imageHeight) 58 59 //print("pdfContex1 = (pdfContext1)") 60 UIGraphicsBeginPDFPage() 61 62//サイズをbinの元々のサイズにする 63 let pdfContext1 = UIGraphicsGetCurrentContext() //// 64 pdfContext1?.scaleBy(x: pdfImageView.bounds.width/self.self.screenWidth, y: pdfImageView.bounds.height/imageHeight)//// 65 UserDefaults.standard.set(pdfImageView.bounds.width/self.screenWidth, forKey: "X") 66 UserDefaults.standard.set(pdfImageView.bounds.height/imageHeight, forKey: "Y") 67 print("X=(pdfImageView.bounds.width)") 68 print("Y=(pdfImageView.bounds.height)") 69 70 guard let pdfContext = UIGraphicsGetCurrentContext() else { return } 71 //VIEW.layer.render(in: pdfContext) 72 73 bin.draw(in: gamen) 74 self.draw(imageView: self.getphoto) 75 76 //image?.draw(in: CGRect(x:,y:,width:,height:)) 77 //CGRect(x: 0, y: 0, width: pdfImageView.bounds.width, height: pdfImageView.bounds.height) 78 79 80 81 UIGraphicsEndPDFContext() 82 83 84 85 if let documentDirectories = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first { 86 let documentsFileName = documentDirectories + "/test.pdf" 87 //パスを保存して次の画面で表示させる 88 UserDefaults.standard.set(documentsFileName, forKey:"filePath") 89 debugPrint(documentsFileName) 90 pdfData.write(toFile: documentsFileName, atomically: true) 91 print("確認") 92 } 93 94 95 96 97 98 99 100 101 102 //let getimagerectback:CGRect = CGRect(x:x, y:y, width:screenWidth, height:imageHeight) 103 //getimage.frame = getimagerectback; 104 105 ///////////////////////////////////////////////////////////VIEWのため変更 106 //VIEW.frame = imagerect; 107 108 } 109 110 /// カレントコンテキストに対してUIImageViewが持つimageをUIImageViewの姿勢のまま描画します。 111 private func draw(imageView: UIImageView) { 112 guard let image = imageView.image else { return } 113 guard let ctx = UIGraphicsGetCurrentContext() else { return } 114 let orgTransform = imageView.transform 115 imageView.transform = .identity 116 let orgFrame = imageView.frame 117 imageView.transform = orgTransform 118 119 ctx.saveGState() 120 ctx.translateBy(x: +orgFrame.midX, y: +orgFrame.midY) 121 ctx.concatenate(orgTransform) 122 ctx.translateBy(x: -orgFrame.midX, y: -orgFrame.midY) 123 124//binsenの画像 125 let binhoge = UserDefaults.standard.integer(forKey: "selectedTag") 126 let bin: UIImage = UIImage(named:"binsen(binhoge)-1.jpg")! 127//元画像の大きさのUIImageViewを作る 128 let pdfImageView = UIImageView(image: bin) 129 screenWidth = self.view.bounds.width 130let imageHeight = screenWidth * 210.0 / 143.5 131 132 133 image.draw(in: orgFrame.aspectFit(contentSize: image.size, stretchble: true, integer: false)) 134 //image.size 135 136 ctx.restoreGState() 137 } 138
補足情報(FW/ツールのバージョンなど)
Swiftのversionは4.1.2
Xcodeのversionは9.4.1

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/15 09:16
2019/02/15 09:27
2019/02/15 09:39