基本的に私が達成したいのは、ユーザーがアプリの特定の部分にいて、必要に応じて画面の回転を変更することです。これは Andriod で機能し、iOS で機能しない理由がわかりません
procedure TForm1.Button1Click(Sender: TObject);
var
ScreenService: IFMXScreenService;
OrientSet: TScreenOrientations;
begin
if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService))
then
begin
OrientSet := [TScreenOrientation.soLandscape];//<- Break point set here and line is executed
ScreenService.SetScreenOrientation(OrientSet);
end;
end;
ここから取得: Delphi xe5 Firemonkey での Android 開発で画面の回転を防ぐ方法
ScreenService.SetScreenOrientation が実行され、例外は発生しませんが、向きは変更されません。また、 [プロジェクト] > [オプション] > [アプリケーション] > [向き] で [カスタムの向きを有効にする] を設定しましたが、これも効果がありませんでした。
私にとって奇妙なのは、サポートされていない場合、これはすべきではないということです
if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService))
false を返しますか? 始まりにも入らない
横向きのみに設定した後、画面の向きを確認するテストボタンを追加しました
if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService))
then
begin
case ScreenService.GetScreenOrientation of
TScreenOrientation.Portrait: ShowMessage('Portrait');
TScreenOrientation.Landscape: ShowMessage('landscape');
TScreenOrientation.InvertedPortrait: ShowMessage('Inverted-Portrait');
TScreenOrientation.InvertedLandscape: ShowMessage('Inverted-Landscape');
else ShowMessage('not set');
end;
end;
また、横向きに設定した後に縦向きだった場合でも、縦向きと表示されます
更新1:変更も試みました
OrientSet := [TScreenOrientation.soLandscape] // <- Deprecated
に
OrientSet := [TScreenOrientation.Landscape]
しかし、動作はまだ同じです