MauiのiOSでGIFアニメーションが動かない
XamarinのときはGIFアニメーションは動作していたのですが、MauiではiOSの場合に動かなくなっていました。
どうやらMauiのバグのようです。
[Bug] Animated GIF files do not play on iOS/macOS · Issue #866 · dotnet/maui · GitHub
回避策として、GIFアニメーションの場合はXamarin.Formsのレンダラーを使うようにすれば動くようになります。
GifImage.cs
Imageクラスを継承しただけのGifImageクラスを作成します。
public class GifImage : Image { }
Maui.Program.cs
GifImageクラスを使用する場合は、Xamarin.Formのレンダラーを使うように設定します。
・・・ .ConfigureMauiHandlers(handlers => { #if IOS handlers.AddCompatibilityRenderer(typeof(GifImage), typeof(Microsoft.Maui.Controls.Compatibility.Platform.iOS.ImageRenderer)); #endif }) ・・・
MainPage.xaml
GifImageクラスを使用してアニメーションGifを表示します。
<local:GifImage Source="anime.gif" IsAnimationPlaying="True" />
MAUIで指紋認証を実装する方法
こちらのサイトが参考になりました。
MAUIで指紋認証を実装する方法
こちらのサイトが参考になりました。
WebViewのカスタムコントロールを作る
Xamarinで開発したときはiOSのWkWebViewと使うためにRendererを使って実装していましたが、MAUIに移行したらJavaScriptが実行されなかったり問題が色々でました。
ハンドラーを使った実装を調べました。
https://stackoverflow.com/questions/73217992/js-net-interact-on-maui-webview
こちらの書き込みに色々試した形跡があり、サンプルコードもありました。
https://github.com/nmoschkin/MAUIWebViewExample
これらを参考にして、Sourceプロパティを扱えるようにし、C#からJavaScript実行できるようにしてみました。
※ひとまず動作してはいますが、あまり詳しくないので変なコードになっていてもご容赦ください。
MainPage.xaml
・C#からJavaScriptを実行するためのボタンを追加
MainPage.xaml.cs
・ViewModelのSourceプロパティへの設定を、MyWebViewのSourceプロパティの設定へ変更
・追加したボタンのクリックイベントを作成し、MyWebView.EvaluateJavaScriptAsyncでJavaScriptを実行する処理を追加
HyblidWebView.cs
・IHybridWebViewの継承元をIView→IWebView
・HybridWebViewの継承元をView→WebView
・Sourceプロパティ関係の記述を削除
HybridWebViewHandler.cs ※iOS
・Sourceプロパティ関係の記述を削除
・HybridWebViewHandlerクラスの継承元をViewHandler→WebViewHandlerに変更
・PropertyMapperを定義し、Sourceプロパティををマッピング
・コンストラクタにMapperとCommandMapperを渡す
・JSBridgeクラスでhybridRenderer.VirtualViewにアクセスするときにHybridWebViewにキャストする。
WebViewHandlerに定義がないプロパティ(今回の場合はSource)を使いたい場合は、PropertyMapperでマッピングを追加しないといけません。
EvaluateJavaScriptAsyncはWebViewHandlerに定義があるので、マッピングしなくても使えます。
MAUIでカスタムコントロールを使う
Xamarinでカスタムコントロールを使っていたのですが、MAUIでは方法が変わっていました。
Rendererではなくハンドラーを使って実装するのが主流のようです。
こちらを参考にしました。
Create custom controls with .NET MAUI handlers - .NET MAUI | Microsoft Learn
MAUIのコントロールをカスタマイズする方法 - Qiita
Customizing Controls in .NET MAUI - .NET Blog
[Enhancement] (HybridWebView) - Invoke C# code from JavaScript · Issue #6446 · dotnet/maui · GitHub
iPadで入力した¥マーク
iPadで入力した文字が半角英数字記号かをチェックする為に、以下の正規表現を使っていました。
[ -~]+
シミュレータのテストでは特に問題ありませんでしたが、iPadの実機を使ってテストしていたろころ、¥だけがチェックに引っかかりました。
シミュレータではPCのキーボードを使って¥を入力していましたが、iPadやシミュレータのソフトキーボードで¥を入力すると、Windowsの¥(バックスペース)とは異なる文字のため、正規表現で期待通りに動作していませんでした。
それなので、チェックする直前に¥マークをバックスペースに置換してからチェックを行うようにしました。
checkString = checkString.Replace((char)165, '\\');