首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >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
代码运行次数:0
运行
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
代码运行次数:0
运行
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

复制
相关文章
【CSS】更改用户界面样式 ① ( 更改鼠标样式 | 更改鼠标样式应用场景 | 代码示例 )
在之前的 【CSS】轮播图案例开发 ( 基本设置 | 子绝父相 | 浏览器水平居中 | 圆角设置 | 绝对定位居中设置 ) 轮播图中 , 鼠标移动到 轮播图底部的小圆点上时 , 一般会变成小手形状的 , 这样用户体验更好 ;
韩曙亮
2023/04/16
2.4K0
【CSS】更改用户界面样式 ① ( 更改鼠标样式 | 更改鼠标样式应用场景 | 代码示例 )
【javascript】原生js更改css样式的两种方式
本文介绍了原生js更改CSS样式两种方式,分别是通过在javascript代码中直接更改CSS样式和利用CSS样式表进行更改。第一种方式是通过在javascript代码中的node.style.cssText="css表达式1;css表达式2;css表达式3",第二种方式是先在CSS样式表中对特定的类设置样式,然后再在javascript代码中通过node.classname="active"来使CSS样式表中对active类的样式设置附加到该node节点上。
啦啦啦321
2018/01/03
4.3K0
JS示例05-style行间样式和class属性样式
1、行间样式优先级高于class属性样式(设置过行间样式后,再设置属性样式则无效) 2、对同一个元素只采用一种属性控制方式(要不是行间样式,要不是class样式),不要混用
专注APP开发
2019/11/07
9.9K0
JS示例05-style行间样式和class属性样式
如何更改伪元素的样式
在前端开发中我们会经常用到伪元素,有时候需要通过js来修改伪元素的样式,那么有哪几种方式来修改伪元素的样式呢?
挥刀北上
2021/01/27
9.3K0
如何更改伪元素的样式
CSS样式更改——过渡、动画
上篇文章主要讲述了CSS样式更改中的2D转换,这篇文章我们来介绍下CSS样式更改中的过渡、动画基础用法。
前端皮皮
2020/11/25
1.2K0
CSS样式更改——文本Content
上篇文章主要讲述了CSS样式更改中的背景Background,这篇文章我们来谈谈文本Content内容的基础用法。
前端皮皮
2020/11/26
1.7K0
ArcGIS JS API 4.17更改测量控件黄白相间的默认样式
当我们使用ArcGIS JS API开发项目时,经常会用到地图测量控件,用于测量地图上两点之间的距离、一片区域的面积或周长等,但是ArcGIS JS API测量控件自带的默认样式是黄白相间的大粗线,这在用户看来是很不美观的,所以就需要我们对其进行一些样式优化。
X北辰北
2022/02/28
1.9K0
ArcGIS JS API 4.17更改测量控件黄白相间的默认样式
CSS样式更改篇——背景Background
上篇文章主要讲述了CSS的基础用法,讲述了如何定义头文件,导入CSS文件,id和class选择器,元素选择器,后代选择器,子元素选择器,兄弟选择器,伪类选择器等等,让大家对CSS选择器有个简单的认识和了解。这篇接上篇文章,继续讲解CSS的基础用法。
前端皮皮
2020/11/26
1.5K0
ios 继承UITableViewController,更改tableview样式
// 继承UITableViewController,更改tableview样式 - (instancetype)initWithStyle:(UITableViewStyle)style { return [super initWithStyle:UITableViewStyleGrouped]; } 在新建的uitableviewcontroller中  加上上述的方法。   等于是重写父类的方法。可以实现tableview的style变成 UITableViewStyleGrouped 转载请注明
用户1219438
2018/02/01
1.2K0
如何更改滚动条样式?
如何自定义浏览器的滚动条呢,下面给大家讲解一下,其实很简单,通过设定css样式就可以实现。
申霖
2019/12/27
2.5K0
如何更改滚动条样式?
如何更改github工程的语言属性
当创建github项目的时候,github本身会根据提交文件的数量来自动推断工程的开发语言,有时这种推断结果会与实际情况不太相符。
Python疯子
2018/09/06
3.4K0
input placeholder属性的样式修改
有时需要修改placeholder的文字颜色,需要用使用 input::-webkit-input-placeholder 选中,然后进行样式设置
德顺
2019/11/13
6.6K0
获取元素的样式属性 原
document.getElementById("test").style.color 这种方式获取的只是内联样式,并不能获取内部样式和外部样式,下面为内部样式
tianyawhl
2019/04/04
2.4K0
CSS样式更改——2D转换
上篇文章主要讲述了CSS样式更改中的裁剪、Z-Index、清除、改变元素的特性基础知识,这篇文章我们来介绍下CSS样式更改中2D转换的基础用法。
前端皮皮
2020/11/25
1K0
Vue 父组件更改子组件样式
中 scoped 是受保护的,当 <style> 标签有 scoped 属性时,它的 CSS 只作用于当前组件中的元素。这类似于 Shadow DOM 中的样式封装固更改子组件的style时是失效的
White feathe
2022/05/05
1.9K0
CSS样式更改——列表、表格和轮廓
上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。
前端皮皮
2020/11/26
2.9K0
PHPCMS更改后台编辑器样式
PHPCMS默认的后台样式用着不习惯,根前台的视觉差太大?没关系,改一下就是了。 后台编辑器样式文件 staticsjsckeditorcontents.css 把前台样式表中控制文字的那一部分拷贝进去稍微修改下即可,当然你可以自定义编辑器背景什么的,看个人喜好了。 我自己比较喜欢的样式现在分享给大家
李维亮
2021/07/09
1.4K0
elementuitable样式更改_elementui下拉框
表格样式修改(表头高、表头边框、表格内边框、表格行高) //控制表头高度 .el-table /deep/ .el-table__header th { padding: 0; height: 40px; line-height: 40px; //表头边框设置 border:solid #cccccc; border-width:1px 0px 0px 1px; } //添加表格行边框 .el-table /deep/ td{ border:solid #cccccc; border-width:1px 0px 0px 1px; } // table右下外边框颜色 .el-table–border:after, .el-table–group:after, .el-table:before { background-color: #cccccc; } //表格上左外边框 .el-table–border, .el-table–group { border-color: #cccccc; } //表头背景色 :header-cell-style=”{background:’#e0e4e5’}” //表格行高还需要设置padding :cell-style=”{padding:‘0px’}”
全栈程序员站长
2022/09/30
6330
Vue.js之Vue计算属性、侦听器、样式绑定
1)el(挂载点) 创建一个Vue这个实例去接管页面中的某个Element(元素)。也就是说el表明和页面上 哪一个节点做绑定! 2)data vue实例都有一些数据,我们把数据都存放在data中。
用户1195962
2018/09/13
1.8K0
Vue.js之Vue计算属性、侦听器、样式绑定
Vue 父组件更改子组件样式
中 scoped 是受保护的,当 <style> 标签有 scoped 属性时,它的 CSS 只作用于当前组件中的元素。这类似于 Shadow DOM 中的样式封装固更改子组件的style时是失效的
White feathe
2022/05/11
1.8K0

相似问题

BeautifulSoup,更改特定样式属性

220

使用JS更改样式

38

JS事件帮助-更改样式属性时

325

js对象-使用单个方法更改多个特定属性

15

使用JS更改内联样式与更改外部样式表样式

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文