Tag: calayer

图层支持NSView旋转和倾斜的兄弟姐妹

我有一个与层支持的NSView和它的兄弟姐妹的一个奇怪的问题,其中一些添加到旋转的超级视图附加到现有的视图层次结构时不正确。 以下是详细信息。 问题 – NSScrollView (layer can be here) – NSClipView (or here) – Document View (or even here) – Some *rotated* subview – { Problematic sublings } 所以,层次结构本身是相当简单和普遍的:带有一些文档的滚动视图,文档子视图代表一些内容。 在我的情况下,它的graphics内容,它可以旋转。 旋转的视图可以有一些额外的子视图 – 各种标记,控制点等等,这就是我使用CALayer作为后端时遇到的歪斜graphics的奇怪问题: 相机图片被分开渲染,它们不是这个视图树的一部分,注意标记和button。 正如你可以在图像上看到的,我有一些testing视图与子视图(只是随机button)。 总是呈现正确的对象。 根据我的testing, frameRotation在[0, pi/2]之间的每个NSView都呈现OK。 左侧的对象呈现模糊,看起来像这个项目的caching缓冲区太小。 当frameRotation处于[pi/2, pi]范围时,会发生这种情况。 最奇怪的事情 这个问题在“实时轮换”中不会发生。 也就是说,如果我只是改变了设置层次结构的框架 ,每个子视图就位,一切正常。 然而, 当subling被添加到已经旋转的对象时 ,它会出现错误,并给出这个模糊的外观。 在我的应用程序中,当用户点击该项目时,会出现一个特殊的子视图,那就是当兄弟被添加到超级视图的那一刻。 看起来后端图层有一些子视图的caching缓冲区,并且当根视图旋转时,它们中的一些计算的大小错误。 它是如何实施的,我试过了什么 视图是相当简单和标准的,我试图推动[view setWantsLayer:YES]到层次结构的根视图:滚动视图,剪辑视图,文档视图,每个结果是相同的。 没有手工制作的图层,没有图层的主机。 […]

如何用CAShapeLayer和UIBezierPath绘制一个平滑的圆?

我试图通过使用CAShapeLayer并在其上设置循环path来绘制一个描边圈。 但是,这种方法在渲染到屏幕上的准确性比使用borderRadius时要less得多,或者直接在CGContextRef中绘制path。 以下是所有三种方法的结果: 请注意,第三个渲染效果不好,特别是在顶部和底部的中风。 我已经将contentsScale属性设置为[UIScreen mainScreen].scale 。 这是我的这三个圈子的绘图代码。 缺less什么使CAShapeLayer平滑绘制? @interface BCViewController () @end @interface BCDrawingView : UIView @end @implementation BCDrawingView – (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { self.backgroundColor = nil; self.opaque = YES; } return self; } – (void)drawRect:(CGRect)rect { [super drawRect:rect]; [[UIColor whiteColor] setFill]; CGContextFillRect(UIGraphicsGetCurrentContext(), rect); CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(), NULL); [[UIColor redColor] setStroke]; CGContextSetLineWidth(UIGraphicsGetCurrentContext(), […]

CALayers没有调整其UIView的边界改变。 为什么?

我有一个UIView约有8个不同的CALayer子层添加到其图层。 如果我修改视图的边界 (animation),然后视图本身缩小(我用backgroundColor检查它),但子图层的大小保持不变 。 如何解决这个问题?

UIViewanimation与CALayers

我正在努力与CALayeranimation概念化,而不是UIView自己的animation方法。 把“ 核心animation ”放到这里,也许有人可以从高层阐述这些概念,这样我就可以更好地想象发生了什么,为什么我想将UIViewanimation(我现在很熟悉)迁移到CALayer iPhone上的animation。 Cocoa-Touch中的每个视图都会自动获取一个图层。 而且,看起来,你可以制作一个和/或另一个animation? 甚至把它们混合在一起?!? 但为什么? 线路在哪里? 什么是亲/对每个? 核心animation编程指南立即跳转到图层和计时类,我认为需要退后一步,了解为什么这些不同的片断存在以及如何相互关联。

如何让文本在CATextLayer中清晰

我用一个添加的CATextLayer做了一个CALayer ,文本出来模糊。 在文档中,他们谈论的是“亚像素抗锯齿”,但这对我来说没有多大意义。 任何人都有一个代码片段,使一个CATextLayer与一些文本是清晰的? 以下是苹果文档中的文字: 注意:CATextLayer在渲染文本时禁用子像素抗锯齿。 只有在光栅化的同时将文本合成到现有的不透明背景中时,才能使用子像素抗锯齿绘制文本。 无论是将像素反锯齿的文本本身绘制成图像还是图层,都无法将背景像素编织成文本像素。 将图层的不透明属性设置为YES不会更改呈现模式。 第二句话意味着如果existing opaque background at the same time that it's rasterized. composites到existing opaque background at the same time that it's rasterized.则可以获得好看的文本existing opaque background at the same time that it's rasterized. 那太好了,但是我怎么把它复合起来,你怎么给它一个不透明的背景,怎么把它光栅化呢? 他们在Kiosk菜单示例中使用的代码是这样的:(它是OS X,不是iOS,但是我认为它可行!) NSInteger i; for (i=0;i<[names count];i++) { CATextLayer *menuItemLayer=[CATextLayer layer]; menuItemLayer.string=[self.names objectAtIndex:i]; menuItemLayer.font=@"Lucida-Grande"; menuItemLayer.fontSize=fontSize; menuItemLayer.foregroundColor=whiteColor; […]

UIView和CALayer有什么区别?

两者都具有大部分相同的属性,都支持不同types的animation,都表示不同的数据。 UIView和CALayer有什么区别?

什么“接收器types”CALayer“例如消息是一个前向声明”是什么意思呢?

我将一个iOS4项目的代码块移植到iOS5,并且在ARC中遇到一些麻烦。 该代码从屏幕截图生成PDF。 PDF生成代码 UIView *captureView; … NSMutableData *pdfData = [NSMutableData data]; UIGraphicsBeginPDFContextToData(pdfData, captureView.bounds, nil); UIGraphicsBeginPDFPage(); CGContextRef pdfContext = UIGraphicsGetCurrentContext(); [captureView.layer renderInContext:pdfContext]; UIGraphicsEndPDFContext(); renderInContext行 [captureView.layer renderInContext:pdfContext]; 生成以下错误。 Automatic Reference Counting issue Receiver type 'CALayer' for instance message is a forward declaration 有什么想法发生在这里?

CALayer:只在一边添加边框

我可以通过这种方式向CALayer添加边框: [webView.layer setBorderColor: [[UIColor colorWithRed:0.6 green:0.7 blue:0.2 alpha:1] CGColor]]; [webView.layer setBorderWidth: 2.75]; 但是只能在一边添加边框吗? 我只需要在底部的边界。 或者我可以用其他属性来达到这个目的,例如框架,范围,面具……? 谢谢你的帮助! b控制-V UIWebView *webView = [[UIWebView alloc] init]; CALayer *webViewLayer = webView.layer; // now you can do a lot of stuff like borders: [webViewLayer setBorderColor: [[UIColor greenColor] CGColor]]; [webViewLayer setBorderWidth: 2.75]; 看一下CALayer文档: https : //developer.apple.com/documentation/quartzcore/calayer 看看这里: http : //iosdevelopertips.com/cocoa/add-round-corners-and-border-to-uiwebview.html

为什么masksToBounds = YES防止CALayer阴影?

用下面的代码片段,我给一个UIView添加了阴影效果。 哪个工作得很好。 但只要我把视图的masksToBounds属性设置为YES 。 投影效果不再呈现。 self.myView.layer.shadowColor = [[UIColor blackColor] CGColor]; self.myView.layer.shadowOpacity = 1.0; self.myView.layer.shadowRadius = 10.0; self.myView.layer.shadowOffset = CGSizeMake(0.0f, 0.0f); self.myView.layer.cornerRadius = 5.0; self.myView.layer.masksToBounds = YES; // <– This is causing the Drop shadow to not be rendered UIBezierPath *path = [UIBezierPath bezierPathWithCurvedShadowForRect:self.myView.bounds]; self.myView.layer.shadowPath = path.CGPath; self.myView.layer.shouldRasterize = YES; 你有什么想法吗?

CALayer有透明的孔洞

我有一个简单的视图(图片的左侧),我需要创build某种叠加(图片的右侧)到这个视图。 这个覆盖层应该有一些不透明的,所以下面的视图仍然是部分可见的。 最重要的是,这个覆盖层的中间应该有一个圆孔,所以它不会覆盖视图的中心(见下图)。 我可以很容易地创build一个这样的圈子: int radius = 20; //whatever CAShapeLayer *circle = [CAShapeLayer layer]; circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0,radius,radius) cornerRadius:radius].CGPath; circle.position = CGPointMake(CGRectGetMidX(view.frame)-radius, CGRectGetMidY(view.frame)-radius); circle.fillColor = [UIColor clearColor].CGColor; 而像这样的“完整”矩形覆盖: CAShapeLayer *shadow = [CAShapeLayer layer]; shadow.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, view.bounds.size.width, view.bounds.size.height) cornerRadius:0].CGPath; shadow.position = CGPointMake(0, 0); shadow.fillColor = [UIColor grayColor].CGColor; shadow.lineWidth = 0; shadow.opacity = […]