前提・実現したいこと
Flutterを使ってネイティブアプリを作っているのですが、Flutterのみでは実装できない機能がありSwiftを使って補いたいのですが、Swiftのコードをほとんど書いたことがないのでどう実装すればいいのかわからず困っています。
実装したいこととしましては、『横幅が画面の幅で、縦幅が指定した高さのスクリーンショット』を撮りたいと思っています。
該当のソースコード
自分なりにスクリーンショットを実装した部分↓
swift
1let window = UIApplication.shared.keyWindow; 2 let layer: CALayer = window!.layer; 3 let scale : CGFloat = UIScreen.main.scale; 4 UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale); 5 UIGraphicsBeginImageContextWithOptions(reSize, false, scale); 6 layer.render(in: UIGraphicsGetCurrentContext()!) 7 let image = UIGraphicsGetImageFromCurrentImageContext(); 8 let imageData = image?.pngData() 9 result(imageData)
フルコード↓
Swift
1import UIKit 2import Flutter 3 4@UIApplicationMain 5@objc class AppDelegate: FlutterAppDelegate { 6 override func application( 7 _ application: UIApplication, 8 didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 ) -> Bool { 10 GeneratedPluginRegistrant.register(with: self) 11 12 let controller: FlutterViewController = window?.rootViewController as! FlutterViewController 13 let methodChannel = FlutterMethodChannel(name: "com.webview_test/getScreenshot", binaryMessenger: controller as! FlutterBinaryMessenger) 14 15 methodChannel.setMethodCallHandler({ 16 (call: FlutterMethodCall, result: FlutterResult) -> Void in 17 18 guard call.method == "takeScreenshot" else { 19 result(FlutterMethodNotImplemented) 20 return 21 } 22 let window = UIApplication.shared.keyWindow; 23 let layer: CALayer = window!.layer; 24 let scale : CGFloat = UIScreen.main.scale; 25 UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale); 26 UIGraphicsBeginImageContextWithOptions(reSize, false, scale); 27 layer.render(in: UIGraphicsGetCurrentContext()!) 28 let image = UIGraphicsGetImageFromCurrentImageContext(); 29 let imageData = image?.pngData() 30 result(imageData) 31 }) 32 33 return super.application(application, didFinishLaunchingWithOptions: launchOptions) 34 } 35}
自分で調べたことや試したこと
https://medium.com/@pradeepkn.pradi/screenshot-plugin-for-flutter-1ed791c5665c
この記事に書いてあるswiftのコードを真似しましたが写している画面のスクリーンショットしか撮れませんでした。
ご教授よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー