小编Ell*_*rry的帖子

在UIView外部添加边框(而不是在内部)

如果使用视图中的代码添加视图的边框

self.layer.borderColor = [UIColor yellowColor].CGColor;
self.layer.borderWidth = 2.0f;
Run Code Online (Sandbox Code Playgroud)

边框添加到视图内部,如下所示: 在此输入图像描述

右视图是原始视图,如您所见,边界视图的黑色区域小于原始视图.但我想得到的是原始视图之外的边框,如下所示:在此输入图像描述.黑色区域等于原始区域,我该如何实现呢?

border uiview ios

80
推荐指数
6
解决办法
9万
查看次数

滚动条在UIScrollView上始终可见?

我需要在viewDidLoad上始终显示滚动条,以便用户可以理解有滚动的内容.我做了以下事情:

[myscrollView flashScrollIndicators];
Run Code Online (Sandbox Code Playgroud)

但是滚动条只会在viewDidLoad之后显示一段时间并再次消失,只是在用户触摸屏幕时重新出现.

我需要让滚动条始终可见.我该怎么做?

iphone cocoa-touch uiscrollview uikit ios

20
推荐指数
2
解决办法
2万
查看次数

大型自定义UIView - CABackingStoreUpdate性能

为什么在iOS 4.3.5上,"大"(960 x 1380)自定义UIView执行CABackingStoreUpdate效率低下,如何提高绘图操作的性能?

不完全确定我的意思?继续阅读......

注意:

随着我对这个问题的理解的发展,这个问题也是如此.因此,问题本身是相似的,但自从首次提出问题以来,以下文本正文中的代码示例和基本细节/推理已经发生了重大变化.

上下文

我有一个令人难以置信的基本应用程序(底部的代码),它在自定义UIView的drawRect:方法中绘制单个elipses.当绘制的elipses的大小保持不变但自定义UIView的大小变大时,应用程序演示了性能上的差异:

小UIView

大UIView

我在运行iOS 4.3.5的iPod 4th Gen和运行iOS 5.1.1的iPad 1st Gen上运行应用程序,使用不同大小的自定义UIViews一系列.
下表显示了时间分析器仪器的结果:

时间分析器结果

以下仪器跟踪显示每个设备的两个极端的详细信息:

iOS 5.1.1 - (自定义UIView大小320 x 460)

iOS 5.1.1  - 自定义UIView大小320 x 460

iOS 5.1.1 - (自定义UIView大小960 x 1380)

iOS 5.1.1  - 自定义UIView大小960 x 1380

iOS 4.3.5 - (自定义UIView大小320 x 460)

iOS 4.3.5  - 自定义UIView大小320 x 460

iOS 4.3.5 - (自定义UIView大小960 x 1380)

iOS 4.3.5  - 自定义UIView大小960 x 1380

正如你所能(希望)在4个案例中的3个案例中我们得到了我们所期望的:大部分时间用于执行自定义UIViews drawRect:方法并且每个都持有10fps.
但是第四种情况显示了性能的下降,应用程序在仅绘制单个形状时难以保持7fps.在UIView的CALayer显示方法中,大部分时间用于复制内存,具体如下:

[CALayer display]>
[CALayer
_display ]> CABackingStoreUpdate>
CA :: Render :: ShmemBitmap :: copy_pixels(CA :: Render :: ShmemBitmap const*,CGSRegionObject*)>
memcpy $ VARIANT $ CortexA8

现在从这些数字中看出这里出现严重错误并不是天才.使用大小为960 x 1380的自定义UIView,iOS 4.3.5花费的时间超过复制内存的4倍,而不是绘制整个视图的内容.

现在,根据上下文,我再次提出我的问题:

为什么在iOS 4.3.5上,"大"(960 x 1380)自定义UIView执行CABackingStoreUpdate效率低下,如何提高绘图操作的性能? …

iphone objective-c uiview ios4 ios

12
推荐指数
1
解决办法
1752
查看次数

将CAShapeLayer蒙版应用于UIView

我正在使用此代码将图层应用于UIview:

mask = [[CAShapeLayer alloc] init];
mask.frame = baseView.layer.bounds;
CGRect biggerRect = CGRectMake(mask.frame.origin.x, mask.frame.origin.y, mask.frame.size.width, mask.frame.size.height);
CGRect smallerRect = CGRectMake(0.0f, 0.0f, 0.0f, 0.0f);

UIBezierPath *maskPath = [UIBezierPath bezierPath];
[maskPath moveToPoint:CGPointMake(CGRectGetMinX(biggerRect), CGRectGetMinY(biggerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMinX(biggerRect), CGRectGetMaxY(biggerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMaxX(biggerRect), CGRectGetMaxY(biggerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMaxX(biggerRect), CGRectGetMinY(biggerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMinX(biggerRect), CGRectGetMinY(biggerRect))];

[maskPath moveToPoint:CGPointMake(CGRectGetMinX(smallerRect), CGRectGetMinY(smallerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMinX(smallerRect), CGRectGetMaxY(smallerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMaxX(smallerRect), CGRectGetMaxY(smallerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMaxX(smallerRect), CGRectGetMinY(smallerRect))];
[maskPath addLineToPoint:CGPointMake(CGRectGetMinX(smallerRect), CGRectGetMinY(smallerRect))];

mask.path = maskPath.CGPath;
[mask setFillRule:kCAFillRuleEvenOdd];
mask.fillColor = [[UIColor blackColor] CGColor];
baseView.layer.mask = mask;
Run Code Online (Sandbox Code Playgroud)

由于我要剪切的矩形发生了变化,我很想知道是否有一种快速方法可以更改蒙版的大小,而不是仅仅从UIview中删除它并使用不同的尺寸重新应用它:

例如

[mask removeFromSuperlayer];
Run Code Online (Sandbox Code Playgroud)

和...

mask = [[CAShapeLayer alloc] …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch uiview cashapelayer ios

7
推荐指数
1
解决办法
1万
查看次数

Google Cast定制接收器超时

使用Google CAF Receiver SDK,当我们不使用接收器播放器时,我们如何防止接收器超时并自动终止强制转换会话?

标准的Google Cast用例是将媒体从设备发送到投射接收器,让接收器使用播放器渲染媒体.该CAF接收器SDK在一个美丽的,简单的方法提供了这个功能使用元素 cast-media-player.

但是对于那些我们想要从设备进行投射并渲染与使用不相关的内容cast-media-player(例如HTML仪表板)的情况,我们如何让接收器保持活力?

例如,以下自定义接收器(简称为HAML)导致演员会话在5分钟后自动终止...

!!! 5
%html
  %head
    :css
      cast-media-player {
        display: none;
      }

    = javascript_include_tag 'https://www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js'
  %body
    %cast-media-player

    :javascript
      const context = cast.framework.CastReceiverContext.getInstance();
      const player = context.getPlayerManager();

      player.setMessageInterceptor(cast.framework.messages.MessageType.LOAD, loadRequestData => {
        ...[load custom view]...
        return false;
      });

      context.start();
Run Code Online (Sandbox Code Playgroud)

接收器日志显示该行cast.framework.common.IdleTimeoutManager] timer expired然后关闭.此处显示示例接收器日志.

我试过了:

很感谢任何形式的帮助!

google-cast chromecast google-cast-sdk caf-receiver-sdk

7
推荐指数
3
解决办法
1314
查看次数