Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Xamarin forms iOS UIView渲染器间歇性OnElementChanged在某些情况下

Xamarin forms iOS UIView渲染器间歇性OnElementChanged在某些情况下
EN

Stack Overflow用户
提问于 2020-07-27 01:37:41
回答 1查看 116关注 0票数 0

我正在使用FlowListView制作视频矩阵视图(1x1-2x2-3x3视图)。对于iOS app,使用UIView渲染器来集成第三方视频SDK。这是FlowListView。

代码语言:javascript
运行
AI代码解释
复制
    <flv:FlowListView x:Name="VideoFlowList" FlowColumnCount="{Binding ColumnCount}" RowHeight="{Binding RowHeight, Mode=TwoWay}"
                  SeparatorVisibility="None" HasUnevenRows="false" BackgroundColor="Transparent"
                  FlowColumnMinWidth="80" FlowTotalRecords="{Binding TotalRecords, Mode=TwoWay}" FlowItemsSource="{Binding Items}">

    <flv:FlowListView.FlowColumnTemplate>
        <DataTemplate>
            <Grid x:Name="VideoGrid" Padding="2" BackgroundColor="{Binding SelectedBorderColour, Mode=TwoWay}" RowSpacing="1" ColumnSpacing="1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <video:CameraView x:Name="MyCameraView" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="Black" />
                <Image x:Name="AddIcon" Source="panel_add.png" Grid.Row="0" Grid.Column="0" IsVisible="{Binding CameraNotAssigned}"
                       HorizontalOptions="Center" VerticalOptions="Center" Aspect="AspectFit" BackgroundColor="Transparent" WidthRequest="50" HeightRequest="50">
                    <Image.GestureRecognizers>
                        <TapGestureRecognizer Command="{Binding BindingContext.AddCameraCommand, Source={x:Reference BrowseItemsPage}}" 
                                              CommandParameter="{x:Reference VideoGrid}" NumberOfTapsRequired="1" />
                    </Image.GestureRecognizers>
                </Image>

                <Label x:Name="Label" HorizontalOptions="Fill" HorizontalTextAlignment="Center" VerticalOptions="End"
                       BackgroundColor="Silver" Opacity="0.5" Text="{Binding CameraName, Mode=TwoWay}" TextColor="Black"/>
            </Grid>
        </DataTemplate>
    </flv:FlowListView.FlowColumnTemplate>
</flv:FlowListView>

在矩阵视图启动时,它在视图模型中显示4个视图(ColumnCount = 2,ToTalRecords = 4),并且每次都可以工作。切换到任何其他视图也是可行的。但有时当从一个视图切换到4个视图时,在覆盖的OnElementChanged中只有2个新元素,而不是4个。如何确保每次获得4个新元素?

请注意,当从9个视图切换到4个视图时,不会出现此问题。

这是ViewRenderer的代码。

代码语言:javascript
运行
AI代码解释
复制
public class VideoRender : ViewRenderer<CameraView, UIVideoView>
{
    private UIVideoView _videoView;

    protected override void OnElementChanged(ElementChangedEventArgs<CameraView> e)
    {
        base.OnElementChanged(e);
        if (e.OldElement != null)
        {
            //Unsubscribe
            _videoView.Tapped -= OnVideoViewTapped;
            Log.Debug($"OldElement CameraIndex {e.OldElement.CameraIndex}, PlayWndHandle {e.OldElement.PlayWndHandle}");
        }
        if (e.NewElement != null)
        {
            //Control is TNativeView, CameraView
            if (Control == null)
            {
                _videoView = new UIVideoView(Element);
                SetNativeControl(_videoView);
            }

            //Element.PlayWndHandle = Handle;

            if (_videoView.Subviews.Length > 0)
            {
                Element.PlayWndHandle = _videoView.Subviews[0].Handle;
            }
            App.PlayWndHandles.Add(Element.PlayWndHandle);
            Log.Debug($"NewElement CameraIndex {Element.CameraIndex}, PlayWndHandle {Element.PlayWndHandle}");
            Log.Debug($"App.PlayWndHandles[{App.PlayWndHandles.Count - 1}]: {Element.PlayWndHandle}");

            // Subscribe
            _videoView.Tapped += OnVideoViewTapped;
        }
    }

}

I added a subview in the UIView UIVideoView and play the video in the subview. Is the issue related to the way I use the subview?
        
void Initialize()
{
    //place the video in subview
    var subView = new UIView();
    subView.UserInteractionEnabled = true;
    AddSubview(subView);
    if (Subviews.Length > 0)
    {
        Subviews[0].Frame = new CoreGraphics.CGRect(0, 0, 100, 100);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-16 04:18:52

似乎使用4个单独的播放窗口句柄列表(每个矩阵大小一个)可以克服句柄管理问题。单个视图是通过清除列表中的句柄来特殊处理的,因为句柄总是会被移除并重新创建。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63107557

复制
相关文章
MAUI 移植 Xamarin.Forms 自定义渲染器
众所周知, .NET MAUI使用的是Handler处理程序, 而Xamarin使用的则是Render渲染器模式。尽管MAUI中使用了新的渲染模式, 但是仍然Xamarin中的支持Render渲染器, 这意味着如果你的项目是从Xamarin移植到MAUI当中, 大部分代码能够可以重用, 本篇文章介绍如何将Xamarin 渲染器(Render)移植到.NET MAUI项目当中。
JusterZhu
2022/12/07
2.6K0
MAUI 移植 Xamarin.Forms 自定义渲染器
C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件..很很很很重要..),附源码
GuZhenYin
2018/01/04
2.4K0
C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件..很很很很重要..),附源码
Xamarin 社区团队发布了的两个新的工具包 MAUI 兼容版本
原文: https://devblogs.microsoft.com/xamarin/introducing-net-maui-compatibility-for-the-xamarin-commun
JusterZhu
2022/12/07
2.4K0
Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面
Xamarin.Forms 是一个跨平台的、基于原生控件的UI工具包,开发人员可以轻松的创建适用于 Android,iOS 以及 Windows Phone的用户界面。Xamarin.Forms 通过使用平台的原生控件来渲染用户界面,使用 Xamarin.Forms 的 App在外观上与平台完全一致。通过本文您可以快速了解如何使用 Xamarin.Form 来进行应用程序的开发。 简介 Xamarin.Forms可以帮助开发人员快速的构建跨平台的UI,通过一次编码,生成多平台界面。如果你做的工作涉及到三个平
葡萄城控件
2018/01/10
13.3K0
Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面
Xamarin Forms 进度条控件
本文翻译:http://xamlnative.com/2016/04/14/xamarin-forms-a-simple-circular-progress-control/ 里面都是胡说的,如果看不懂可以联系邮箱 源代码:https://github.com/billreiss/xamlnative/tree/master/XamarinForms/CircularProgress 最近作者需要做一个简单的圆形的等待控件在一个Xamarin Forms应用,效果可以看
林德熙
2018/09/18
1.1K0
Xamarin Forms 进度条控件
Xamarin.Forms学习系列之SQLite
在App中我们通常不会实时获取服务器数据,会在用户手机中保存历史数据,这个时候就需要用到数据库SQLite,由于微软的封装,在Xamarin中操作SQLite非常简单,类似EF的操作。
宿春磊Charles
2021/12/01
1.2K0
Xamarin.Forms学习系列之SQLite
Xamarin.Forms 阐述和环境搭建
        Xamarin已经出来好多年了!最近几年M$又把这个库收入自己麾下。在 visual studio 系列开发套件中提供免费版的。为广大C#码农提供了更便利的跨iOS,android,windows系统的开发工具。我们要感谢M$的不懈努力。当然,这也是M$的自救,因为随着iOS,android的兴起,windows系统快没落了。几年前,你要说家里没台电脑,都不好意思跟别人玩耍。现在,大家回家都捧着手机看了,电脑都落了厚厚一层灰了!
xiny120
2019/06/11
1.7K0
Xamarin.Forms 阐述和环境搭建
Xamarin.Forms 按钮样式 圆角按钮
在 Xamarin 中可以方便进行样式定义或不进行定义样式只修改属性而改变外观,如按钮的圆角可以通过 CornerRadius 属性设置
林德熙
2020/12/07
3.3K0
Xamarin 社区工具包的现状和未来
Xamarin 社区工具包是一个使用 Xamarin.Forms 进行移动开发的可重用的元素集,包括动画、行为、转换器、效果和辅助工具。它简化了在使用 Xamarin.Forms 构建 iOS、Android、macOS、WPF 和通用 Windows 平台(UWP)应用程序时常见的开发任务。对于新的或现有的 Xamarin.Forms 项目,Xamarin 社区工具包可以通过 Visual Studio NuGet 获得。
深度学习与Python
2021/11/10
2.9K0
Xamarin.Forms扩平台移动开发初体验
近期花了1周时间熟悉和使用Xamarin.Forms进行跨平台开发,本想做一个针对H5 Web的封装,希望在安卓和苹果平台优先使用微信X5内核的浏览器,然后最差也要用Chrome内核的,可惜百度、Google翻墙,QQ群咨询,试了WebView的CustomRender,也尝试了Xamarin.Forms.Essential 的Browser,以失败告终。
崔文远TroyCui
2019/02/26
1.3K0
xamarin.forms新建项目android编译错误
vs2015 update3 新建的xamarin.forms项目中的android项目编译错误。提示缺少android_m2repository_r22.zip,96659D653BDE0FAEDB818170891F2BB0.zip等类似错误。
旺财的城堡
2018/11/20
1.4K0
.NET MAUI 正式发布,再见了 Xamarin.Forms
David Ortinau 在dotnet 团队博客上发表了一篇文章《Introducing .NET MAUI – One Codebase, Many Platforms》,在这篇文章里宣布了MAUI的正式发布。
张善友
2022/05/30
2.6K0
.NET MAUI 正式发布,再见了 Xamarin.Forms
Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端
完整思维导图:https://github.com/dotnet9/TerminalMACS/blob/master/docs/TerminalMACS.xmind
DDGarfield
2022/06/23
4.1K0
Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端
C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码
本文介绍了如何用Xamarin.Forms实现底部导航栏按钮的点击事件,并通过调用C#代码的方法来实现点击按钮后切换页面的功能。同时,为了方便操作,文章中还提供了一个自定义按钮和页面的UI设计。
GuZhenYin
2018/01/04
1.4K0
C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码
笔记 | Xamarin
所有 Android 应用都必须在 AndroidManifest.xml 中为外部存储声明两个权限之一。
yiyun
2022/04/01
24.3K0
笔记 | Xamarin
CA周记 - 跟我做⼀个高德地图的 iOS / Android MAUI 控件(前言)
Microsoft Build 2022 ⼤会上正式发布了 .NET MAUI , 对于 .NET 开发者可以⽤ C# 完成跨平台的前端应⽤开发。对⽐起 MAUI 的前身 Xamarin , MAUI 除了可以⽤传统的原⽣开发模式外,还⽀持了 Blazor 的混合式开发。这也让更多⽅向的开发⼈员能进⼊到跨平台的应⽤开发中来。有⼈会提出云原⽣时代,前端开发还重要吗 ?实际上,多端应⽤兼容是云原⽣不可缺少的门面。互联⽹时代,有很多出⾊的应⽤,并发布了针对第三⽅应⽤的 SDK,开发者可以结合这些 SDK 做相关的解决⽅案。通过 MAUI 能调⽤这些 SDK 吗?我会通过系列⽂章去和⼤家介绍。作为该系列的开篇,我先来介绍⼀下需要掌握的技能, 让⼤家有所准备。
JusterZhu
2022/12/07
9550
CA周记 - 跟我做⼀个高德地图的 iOS / Android MAUI 控件(前言)
iOS14开发-UIView
在 iOS 13 中引入了新的 API — Diffable Data Source,它不仅能够驱动 UITableView 和 UICollectionView,而且可以更简单高效的实现数据的刷新。
YungFan
2021/01/21
12.1K0
dotnet 在 UOS 国产系统上使用 Xamarin Forms 创建 xaml 界面的 GTK 应用
在前面几篇博客告诉大家如何部署 GTK 应用,此时的应用是特别弱的,大概只是到拖控件级。尽管和 WinForms 一样也能写出特别强大的应用,但是为了提升一点开发效率,咱开始使用 xaml 神器写界面。本文告诉大家如何在 UOS 国产系统上,通过 Xamarin.Forms 使用 XAML 写界面逻辑,构建出 GTK 应用
林德熙
2020/09/06
2.7K0
dotnet 在 UOS 国产系统上使用 Xamarin Forms 创建 xaml 界面的 GTK 应用
iOS 页面渲染 - UIView & CALayer
今天我们来聊一聊 UIView 与 CALayer 的相关知识以及它们之间的关系,其实这部分内容要是引申出来会比较多,今天我们先收敛一下,先讲一些基本的东西,后面还会有系列文章对其进行扩展。关于iOS的UI渲染部分,还是建议大家看看Apple的官方文档核心动画编程指南[1]以及WWDC2011的sessionUnderstanding UIKit Rendering[2]。
CoderStar
2022/08/24
2K2
iOS 页面渲染 - UIView & CALayer
iOS学习——UIView的研究
在iOS开发中,我们知道有一个共同的基类——NSObject,但是对于界面视图而言,UIView是非常重要的一个类,UIView是很多视图控件的基类,因此,对于UIView的学习闲的非常有必要。在iO
mukekeheart
2018/03/26
2.8K0
iOS学习——UIView的研究

相似问题

为iOS Xamarin.Forms选择渲染器?

21

Xamarin Forms自定义渲染器ios

13

Xamarin Forms iOS渲染器- ToolBar标准图标

31

我的OnElementChanged in xamarin.forms出了什么问题

11

Xamarin.Forms渲染器中的iOS图像问题

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档