• Xamarin.Forms for iOS初体验


    Xamarin是一个支持多平台的应用开发框架,它最大的特点就是可以使用C#开发Android/iOS app,并且共用一套C#代码就可以发布到多个不同的平台。Xamarin在2011年诞生,一开始是收费的,后来被微软收购之后免费开源,并直接集成到了Visual Studio里。但要说明的是Xamarin的生态一直没建立起来,用的人不多。并且之前了解到微软的计划是将Xamarin整合到MAUI,所以MAUI才是未来。

    在Mac里使用C#开发Xamarin iOS app,可以选择Xamarin.Forms。但之前必须先将开发工具升级到当前的最新版本。

    我的开发测试环境:

    1. Visual Studio 2019 for Mac、Xcode 13.2.1

    2. iphone7/15.3.1

    一、程序开发

    首先打开Visual Studio 2019 for Mac,然后创建Xamarin.Forms项目。在MainPage.xaml添加两个Button和一个Image。

    <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 x:Class="firstApp.MainPage">
    
        <StackLayout>
            
            <StackLayout Margin="20,35,20,20">
                <Button x:Name="takePhoto"
                        Text="相册"
                        FontSize="30"
                        TextColor="White"
                        BackgroundColor="Red"
                        CornerRadius="5"
                        />
    
                  <Button x:Name="takePhoto2"
                        Text="拍照"
                        FontSize="30"
                        TextColor="White"
                        BackgroundColor="LightGreen"
                        CornerRadius="5"
                        />
            </StackLayout>
            <Image x:Name="image" WidthRequest="150" HeightRequest="200" />
        </StackLayout>
    
    </ContentPage>

    Xamarin支持热更新。直接修改xaml界面,手机界面会同步变化。

    我们这里演示的是iOS拍照显示图片功能,可以在VS for Mac里面通过Nuget安装一个包:Xam.Plugin.Media。

    接下来就可以添加拍照和浏览的逻辑。

    public MainPage()
    {
        InitializeComponent();
    
        takePhoto.Clicked+= async (sender,args) =>{
            await CrossMedia.Current.Initialize();
    
            if(!CrossMedia.Current.IsPickPhotoSupported)
            {
                _=DisplayAlert("No Photo",":(No photo available.)","OK");
                return;
            }
    
            var file = await CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions {
                         
            });
    
            if (file == null) return;
    
            image.Source = ImageSource.FromStream(() => {
                var stream = file.GetStream();
                file.Dispose();
                return stream;
            });
    
        };
    
        takePhoto2.Clicked += async (sender, args) => {
            await CrossMedia.Current.Initialize();
    
            if(!CrossMedia.Current.IsCameraAvailable||!CrossMedia.Current.IsTakePhotoSupported)
            {
                _ = DisplayAlert("No Camera", ":( No camera available.)", "OK");
                return;
            }
    
            var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
            {
                Directory = "Sample",
                Name = "test.jpg"
            });
    
            if (file == null) return;
    
            //await DisplayAlert("File Location",file.Path,"OK");
    
            image.Source = ImageSource.FromStream(() => {
                var stream = file.GetStream();
                file.Dispose();
                return stream;
            });
        };
    }

    上面的代码非常类似,只是图片的源不一样而已。

    另外要拍照和浏览本机相册,需要添加相应的权限。可以在项目的info.plist文件里添加如下配置:

    <key>NSCameraUsageDescription</key>
    <string>This app needs access to the camera to take photos.</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>This app needs access to photos.</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>This app needs access to microphone.</string>
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>This app needs access to the photo gallery.</string>

    二、部署到真机

    部署目标设置为数据线连接的iphone手机,然后直接在VS2019 for Mac中运行会报错——没有预分配标识符。我们可以先用XCode创建一个app项目,然后将Bundle identifier复制到VS2019 for Mac的plist文件中的捆绑包标识符,再在VS2019 for Mac中运行部署到真机。

    注意:在iphone要设置信任该应用才能正常运行,iphone设置路径为:设置-通用-VPN与设备管理。

    由于只是初体验,所以功能比较简单,就是一个浏览相册和拍照并显示的功能。

    参考资料:

    1. https://docs.microsoft.com/zh-cn/xamarin/get-started/what-is-xamarin-forms

    2. https://github.com/jamesmontemagno/MediaPlugin/

    3. http://t.zoukankan.com/xclw-p-11419312.html

  • 相关阅读:
    验证身份证
    base64.js
    mysql常用操作
    drop、truncate和delete的区别
    安装mysql
    一些常用计算
    nuxt+vant+rem项目构建
    vue2安装sass 预编译
    vant ui rem配置流程
    关于vue项目和内嵌iframe页面之间的通信问题
  • 原文地址:https://www.cnblogs.com/guwei4037/p/15998364.html
Copyright © 2020-2023  润新知