コメント
コメントの投稿
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using PhotosUI;
[assembly: Dependency(typeof(ImageService))]
public class ImageService : IImageService
{
/// <summary>
/// イメージ選択画面を表示する(外部アプリ)
/// </summary>
public void ShowImageGallery()
{
UINavigationController navigationController = FindNavigationController();
if (UIDevice.CurrentDevice.CheckSystemVersion(14, 0))
{
//新しいPHPickerViewControllerを呼び出します。
var config = new PHPickerConfiguration();
config.SelectionLimit = 1; //default 1, SelectionLimit=0にすると複数選択可能
config.Filter = PHPickerFilter.ImagesFilter;
var picker = new PHPickerViewController(config);
picker.Delegate = new CustomPHPickerViewControllerDelegate();
navigationController.PresentViewController(picker, true, null);
}
else
{
//従来のイメージピッカーです。iOS14以降で動作しません。
UIViewController viewController = new AppName.iOS.Model.ImagePickerController();
navigationController.PresentViewController(viewController, true, null);
}
}
}
using PhotosUI;
public class CustomPHPickerViewControllerDelegate : PHPickerViewControllerDelegate
{
public override void DidFinishPicking(PHPickerViewController picker, PHPickerResult[] results)
{
if (results != null &&
results.FirstOrDefault() != null)
{
//選択した結果を取得してImageSourceに変換する
var itemProvider = results.FirstOrDefault().ItemProvider;
if (itemProvider.CanLoadObject(typeof(UIImage)))
{
//LoadObjectで選択した画像を取得します。
//取得できない場合は error でエラーコードとエラー内容が取得できます。
itemProvider.LoadObject<UIImage>((selectedImage, error) =>
{
if (selectedImage == null)
{
return;
}
UIApplication.SharedApplication.InvokeOnMailThread(() =>
{
var image = selectedImage as UIImage;
//App.csのImageSourceにセットする
ImagePickerController.SetAppImageSource(image);
}
});
}
}
//PHPickerViewControllerを終了する
picker.DismissViewController(true, null);
}
}
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。