Tag: calayer

自定义Airplaybutton的外观

我使用标准的渐变叠加(在Photoshop中完成),使button看起来更好,在我的应用程序。 我添加了一个Airplaybutton,但美观不匹配。 我真的想把它放在一个渐变层,所以它匹配,但我能find的任何东西只显示如何用PNG,而不是现有的UIView。 如果不是渐变层,我只需要以任何方式改变Apple Airplaybutton的外观,同时保持其function的完整性。 设置代码很简单: MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:frame]; [volumeView setShowsVolumeSlider:NO]; [bottomPanel addSubview:volumeView]; 我怎样才能得到这个匹配我的控件的外观?

在iOS上,从上下文创build一个图层并获取图层的上下文之后,这些上下文又是如何相互关联的?

我们可以从当前的graphics上下文创build一个图层,然后获取图层的上下文: CGContextRef context = UIGraphicsGetCurrentContext(); CGLayerRef layer = CGLayerCreateWithContext(context, CGSizeMake(self.frame.size.width, self.frame.size.height), NULL); CGContextRef contextOfLayer = CGLayerGetContext(layer); 所以我们现在有两个上下文: context和contextOfLayer 。 这两种情况如何相互关联? contextOfLayer实际上是context一部分, context有一个图层上下文指针的数组? 如果我使用NSLog(@"%p", …)打印出他们的地址,他们有不同的地址,所以它们不是同一个对象。 而且我认为contextOfLayer不会影响上下文堆栈,所以它只是一个独立的上下文而已?

用UILabel文本掩码显示UIView

我试图添加一个UIView到一个UILabel ,以便文本是视图的面具,使我能够做像animation文本背景的东西(很像幻灯片解锁锁屏上的标签)。 我打算这样做的方式是在视图的layer上使用mask属性来将其掩盖为文本的形状。 但是,我无法find一种方式来获得UILabel的CALayer文本形状。 这甚至有可能吗? 我只能find覆盖UILabel的-(void)drawRect:方法的解决scheme,但是这不会给我太大的灵活性。

animation完成时如何去除图层?

我正在制作一个iOS应用程序 。 我有几个CALayer对象,最终将被(缩小) animation 删除 。 当animation完成, animationDidStop:finished被调用时,我想从超级视图中删除CALayer对象并将其删除。 但是我怎么能得到animationDidStop:finished的CALayer对象animationDidStop:finished ? 我会猜测CAanimation有一个指向该图层的指针,但我无法在文档中find它。 有没有更好的方法来处理这个问题? (其实,我有几个animation对象添加到同一图层,理想情况下,我只想在最后一个animation完成时才移除图层)

CAGradientLayer对angular线渐变

我使用以下CAGradientLayer: let layer = CAGradientLayer() layer.colors = [ UIColor.redColor().CGColor, UIColor.greenColor().CGColor, UIColor.blueColor().CGColor ] layer.startPoint = CGPointMake(0, 1) layer.endPoint = CGPointMake(1, 0) layer.locations = [0.0, 0.6, 1.0] 但是当我为图层设置边界属性时,它只是拉伸一个方形渐变。 我需要一个类似于Sketch 3应用程序图像的结果(请参阅上文)。 我怎样才能做到这一点?

触摸移动在CAShapeLayer绘图慢/ laggy

正如在先前的StackOverflow问题中向我推荐的那样,我试图改进我的绘图方法,让我的用户在UIView中绘制线条/点。 我现在试图绘制使用CAShapeLayer而不是dispatch_async。 然而,这一切都正常工作,但是,在触摸移动的同时不断移动到CAShapeLayer中变得缓慢,path滞后,而我的旧的(效率低下的我被告知)代码工作得非常stream畅和快速。 你可以看到我的旧代码注释如下。 有什么办法来改善我想要做的事情吗? 也许我正在过度看待一些事情。 我会很感激提供的任何帮助。 码: @property (nonatomic, assign) NSInteger center; @property (nonatomic, strong) CAShapeLayer *drawLayer; @property (nonatomic, strong) UIBezierPath *drawPath; @property (nonatomic, strong) UIView *drawView; @property (nonatomic, strong) UIImageView *drawingImageView; CGPoint points[4]; – (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; self.center = 0; points[0] = [touch locationInView:self.drawView]; if (!self.drawLayer) […]

setNeedsDisplay,drawRect或CALayer导致dispatch_continuation_alloc_from_heap malloc内存泄漏iOS

我在应用程序中遇到内存泄漏,似乎来自CALayer。 看起来好像只影响老iPad; 我看到iPad 1和2的问题,但iPad Air没问题。 我有一个iPad 1的崩溃报告,显示我的应用程序由于内存不足而“被抛弃”,这个漏洞是我的主要嫌疑。 背景 在操作期间,setNeedsDisplay每40ms由不同的UIViews上的networking线程不断地调用,以更新它们的视觉效果,参见下面的函数。 – (void)setNeedsRepaint { [self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO]; } 模拟iPad2并使用分配工具,我发现每次setNeedsDisplay被调用时,malloc 64的引用计数都会永久上升。 负责的库是libdispatch.dylib,调用者是dispatch_continuation_alloc_from_heap。 iPad Air模拟器不显示此问题,在这种情况下,malloc 32引用计数只是暂时上升。 即使在setNeedsDisplay来自GUI线程并且不通过performSelectorOnMainThread调度的情况下,我也看到malloc 64引用计数上升。 以下是分配工具的屏幕截图。 标记为3的malloc是有问题的泄漏。 标记为1&2的malloc泄漏得慢得多,但仍然是一个小问题。 采取的步骤 为了排除drawRect中的内存泄漏,我注释了大括号之间的所有代码,但泄漏的内存仍然继续积累。 如果我不重写drawRect方法,我不会看到泄漏,但我需要为了绘制和更新我的视图。 我也没有看到它,如果setNeedsDisplay不被调用,我可以调用一个虚拟函数,而不是内存泄漏performSelectorOnMainThread。 我已经尝试使用块和dispatch_async而不是performSelectorOnMainThread在GUI线程上运行setNeedsDisplay。 我也尝试减less应用程序,以便setNeedsDisplay只能在一个视图上重复调用。 然后删除所有指向该视图的指针,以便ARC清理它,希望stream浪的malloc可能会被清理干净。 我试着直接设置CALayer的内容而不是调用setNeedsDisplay。 它呈现,但malloc计数完全相同的方式上升。 self.layer.contents = (__bridge id) _dummyCGImageRef; 读完这个之后,我认为泄漏可能是由于队列变得臃肿。 然而,我的函数调用速度减慢了10倍,只是使内存泄漏增长了10倍。 结论 泄漏似乎绑定到CALayer,而不是调度队列和performSelectorOnMainThread。 看起来这个问题在以后的iPad中已经修复,但是我仍然需要一个解决旧版本的解决方法。 问题 有没有人有任何提示debugging呢? 另一种仪器是否更适合find确切的原因? 这是模拟器的一个特点,我看到的不是我的应用程序抛弃的原因吗? 任何人都知道这是什么原因? 这是一个历史性的bug,因为它不影响iPad Air? 我有一个子类化的技巧,我可以用CALayer来防止后备存储分配内存,或另一种方式我更新我的视觉视觉? […]

<CATransformLayer:0x14fea3710> – 在仅变换图层中更改属性masksToBounds将不起作用

我在xCode 7.0中得到这个警告报告 当我在我的项目中使用MBProgress HUD时,会发生这种情况。 如何处理这个警告? 在Xcode 7中,我看到“在变换层中改变属性蒙板ToBounds,不会有任何效果”,但是没有用…

通过在后台线程 – iPhone上渲染UIWebView来创buildUIImage

是否有人知道如何获得从UIWebView呈现的UIImage的方式或创意? 问题在于,这必须在后台线程上。 我将详细说明:我试图从多个UIWebViews每秒获取图像 – ,并将其显示在屏幕上(当然是iPhone)。 因为渲染一个图层到CGContext是一个CPU消耗的工作,我不想使用主线程,所以不要挂用户界面。 我到目前为止的尝试是: 我试图在webView的图层上使用renderInContext到UIGraphicalContext ,但是_WebTryThreadLock错误使webviews崩溃。 我试图创build一个CGBitmapContext ,并呈现webview的图层,但得到了相同的结果。 我尝试了一个copy方法(通过添加一个类别) CALayer ,深层复制所有的公共属性和子层。 之后,我尝试renderInContext我复制的图层。 我得到了一个部分 “正确”的UIImage – 意思是,并不是所有的图层都被渲染,例如,我只能得到网站的页眉(或页脚,或正文,或search栏,或只是一些框架)。 UIWebview的图层由各种types的CALayers组成,所以这可能是为什么这个接近不起作用。 我尝试在kCATransactionDisableActions中设置CATransaction ,但似乎并没有改变这种行为(两者都没有)。 我相当接近放弃。 你们中间有救世主吗?

masksToBounds和cornerRadius之间的关系是什么?

我的滚动有一些意见是cornerRadius = 10.0和masksToBounds = YES 。 这会导致滚动我的滚动视图的性能问题。 虽然我尝试了每个视图的shouldRasterize设置为YES ,但问题并没有解决。 但是,我知道这个问题的解决scheme。 那就是masksToBound被设置为NO 。 ( masksToBound's默认值是NO)尽pipemasksToBound是NO ,我的视图的angular仍然有曲线,性能问题也解决了。 我想知道cornerRadius和masksToBounds之间的关系。 我担心这个设置意外的问题。 谢谢。