我做了CALayer一个添加CATextLayer,文字出来模糊.在文档中,他们谈论"亚像素抗锯齿",但这对我来说并不重要.任何人都有一个代码片段,CATextLayer使用一些明确的文本?
以下是Apple文档中的文字:
注意:CATextLayer在渲染文本时禁用子像素抗锯齿.只有在光栅化的同时将文本合成到现有的不透明背景中时,才能使用子像素抗锯齿来绘制文本.在将背景像素编织成文本像素之前,无法单独绘制子像素抗锯齿文本,无论是图像还是图层.将图层的opacity属性设置为YES不会更改渲染模式.
第二句话暗示一个人可以获得好看的文本,如果composites它变成一个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;
[menuItemLayer addConstraint:[CAConstraint
constraintWithAttribute:kCAConstraintMaxY
relativeTo:@"superlayer"
attribute:kCAConstraintMaxY
offset:-(i*height+spacing+initialOffset)]];
[menuItemLayer addConstraint:[CAConstraint
constraintWithAttribute:kCAConstraintMidX
relativeTo:@"superlayer"
attribute:kCAConstraintMidX]];
[self.menuLayer addSublayer:menuItemLayer];
} // end of for loop
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:添加我实际使用的代码导致文本模糊.这是来自我发布的一个相关问题,即添加一个UILabel而不是一个CATextLayer但是得到一个黑盒子. http://stackoverflow.com/questions/3818676/adding-a-uilabels-layer-to-a-calayer-and-it-just-shows-black-box
CATextLayer* upperOperator = [[CATextLayer alloc] init];
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGFloat components1[4] = {1.0, 1.0, …Run Code Online (Sandbox Code Playgroud) 我有以下CALayer:
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = CGRectMake(8, 57, 296, 30);
gradient.cornerRadius = 3.0f;
gradient.colors = [NSArray arrayWithObjects:(id)[RGB(130, 0, 140) CGColor], (id)[RGB(108, 0, 120) CGColor], nil];
[self.layer insertSublayer:gradient atIndex:0];
Run Code Online (Sandbox Code Playgroud)
我想为它添加内部阴影效果,但我不太清楚如何做到这一点.我想我会被要求在drawRect中绘制,但是这会在其他UIView对象之上添加图层,因为它应该是一些按钮背后的条形图,所以我不知道该怎么做?
我可以添加另一个图层,但是再次,不知道如何实现内部阴影效果(如下所示:

帮助赞赏......
使用以下代码片段,我将向我的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;
Run Code Online (Sandbox Code Playgroud)
你有什么想法吗?
我有一个CAGradientLayer插入到应用程序底部弹出的这个小细节视图的底部.正如你所看到的,我将颜色从白色设置为清晰,但是出现了这种奇怪的灰色色调.有任何想法吗?
// Set up detail view frame and gradient
[self.detailView setFrame:CGRectMake(0, 568, 320, 55)];
CAGradientLayer *layer = [CAGradientLayer layer];
layer.frame = self.detailView.bounds;
layer.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
layer.startPoint = CGPointMake(1.0f, 0.7f);
layer.endPoint = CGPointMake(1.0f, 0.0f);
[self.detailView.layer insertSublayer:layer atIndex:0];
Run Code Online (Sandbox Code Playgroud)
这是有问题的观点:
我正在努力用CALayer概念化动画而不是UIView自己的动画方法.把" 核心动画 "扔进去,好吧,也许有人可以从高层次上清楚地表达这些概念,这样我就可以更好地想象发生了什么,以及为什么我想把UIView动画(我现在很熟悉)迁移到CALayer iPhone上的动画.Cocoa-Touch中的每个视图都会自动获取一个图层.而且,似乎你可以为一个和/或另一个制作动画?!?甚至将它们混合在一起?!?但为什么?线路在哪里?每个人的赞成/赞成是什么?
核心动画编程指南立即跳转到层和计时类,我认为需要退一步,理解为什么这些不同的部分存在以及如何相互关联.
我正在尝试在iOS应用中拖动CALayer.
一旦我改变它的位置属性,它就会尝试动画到新位置,并在整个地方闪烁:
layer.position = CGPointMake(x, y)
Run Code Online (Sandbox Code Playgroud)
如何立即移动CALayers?我似乎无法理解Core Animation API.
我试图通过使用CAShapeLayer并在其上设置圆形路径来绘制一个描边圆.但是,这种方法在渲染到屏幕时的效果始终低于使用borderRadius或直接在CGContextRef中绘制路径.
以下是所有三种方法的结果: 
请注意,第三个渲染效果不佳,尤其是在顶部和底部的笔划内.
我已将该contentsScale属性设置为[UIScreen mainScreen].scale.
这是我对这三个圆圈的绘图代码.使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(), 1);
[[UIBezierPath bezierPathWithOvalInRect:CGRectInset(self.bounds, 4, 4)] stroke];
}
@end
@interface BCShapeView : UIView
@end
@implementation BCShapeView
+ (Class)layerClass
{
return [CAShapeLayer class];
} …Run Code Online (Sandbox Code Playgroud) 嗨,我正在开发iPhone应用程序,我试图为edittext设置一个边框.我是按照以下方式做到的:
int borderWidth = 1;
CALayer *leftBorder = [CALayer layer];
leftBorder.borderColor = [UIColor whiteColor].CGColor;
leftBorder.borderWidth = borderWidth;
leftBorder.frame = CGRectMake(0, textField.frame.size.height - borderWidth, textField
.frame.size.width, borderWidth);
[textField.layer addSublayer:leftBorder];
Run Code Online (Sandbox Code Playgroud)
我对IB中的edittext设置了一些约束,这样当我旋转设备时,它会根据它调整文本字段的宽度.我的问题是调整edittext的宽度而不是调整我为编辑文本设置的CALayer的宽度.所以我想我必须为我的CALayer项目设置一些约束.但我不知道该怎么做.有人知道吗?需要帮忙.谢谢.
我可以用这种方式为CALayer添加边框:
[webView.layer setBorderColor: [[UIColor colorWithRed:0.6 green:0.7 blue:0.2 alpha:1] CGColor]];
[webView.layer setBorderWidth: 2.75];
Run Code Online (Sandbox Code Playgroud)
但是,是否可以仅在一侧添加边框?我只需要底部的边框.或者我可以用其他属性来达到这个目的,例如框架,边界,面具,......?

谢谢你的帮助!
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];
Run Code Online (Sandbox Code Playgroud)
请查看CALayer文档:https: //developer.apple.com/documentation/quartzcore/calayer
看看这里:http: //iosdevelopertips.com/cocoa/add-rounded-corners-and-border-to-uiwebview.html
A UIView有一个CALayer.这很确定.但两者似乎都提供了同样的东西.
如果我设置clipsToBounds=YES,这还会设置图层masksToBounds=YES吗?为什么不同名字?有谁知道?
calayer ×10
ios ×8
iphone ×3
objective-c ×3
uiview ×3
uikit ×2
autolayout ×1
caanimation ×1
cashapelayer ×1
cocoa-touch ×1
text ×1