我做了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) 我有一个模态视图控制器,其视图来自XIB.我希望它具有与我的基于导航的应用程序的其余部分相同的外观和感觉,但它不是一个被推送到导航堆栈的视图,它以模态呈现.我拖了一个UINavigationBar并将它作为一个插座,但它没有要设置的title属性.我有两个字段可以调出这个模态视图,我希望标题设置不同,具体取决于哪一个创建模态视图.
我有一个UIView
我想添加几个文本.我曾经使用过UITextView
但我觉得这样做太过分了,因为它不需要编辑.我想过使用a UILabel
或a UITextField
,但我看不出你如何告诉superview在哪里定位UILabel
或UITextField
在其中.我想要最小的足迹对象,让我把我选择的字体/颜色/大小的文本放在UIView
我想要的地方.没问题,呃?
我经常努力让我的代码签名工作.我正在尝试获得一个良好的通用配置文件,该配置文件适用于开发过程中的所有应用程序.他们总是失败的代码,但他们也总是安装在我的手机上.去搞清楚.
我已经创建了一个App ID ##########.mydomainname.*
,并将其与我的开发证书相关联,但是在Team Provisioning Profile: *
生成时,它使用的是我在一年前首次注册时创建的App ID .我不知道这是否有问题,但我想尝试将Team Provisioning Profile: *
我的##########.mydomainname.*
应用ID 与之关联起来.我很厌倦不断摆弄配置 - 最终我让它工作,但它从来都不是同一个配方.
我可以以某种方式编辑配置文件中使用的应用程序ID吗?
更新:将问题标记为已回答,但看起来答案是您不能按照我的要求进行操作.
我到处搜索过,没有找到任何帮助......
我用两个构建了一个小测试应用程序UIViewControllers
并且它们对应的xibs.
东西很好,然后我对这两个进行了一些更改,xibs
但是当我构建和运行时,我得到了旧视图.我已经尝试删除构建文件夹,在模拟器和设备中运行,清理所有目标,但仍然是相同的,旧的,xibs
我完全改变的故障仍然出现.我重新启动了所有Xcode应用程序甚至我的计算机.
变得非常恼火!
编辑:我从未弄清楚问题是什么.基本上,一旦我建立了一个项目,它就会记住我制作的第一个xib,并且不会识别它们的变化.如果我告诉视图控制器从一个不同的,有效的笔尖名称加载,它会抱怨旧的不存在.
我重新安装了Xcode,现在它再次运行.啧.
是否可以在cocoa touch中根据gps的坐标获取设备的本地时区?去年我看到了这个,但没有回答......
我真正想要的是与GMT的小时数差异,我不想查询Web服务.
或者,我可以询问设备设置的时区吗?
可以吗?
我想CGPathRef
在一天中的不同时刻基于太阳的坐标以编程方式构建.计算积分不是问题,但我想做一个CGPathRef
平滑的想法CGPathAddCurveToPoint
是合适的.
我理解路径,变换,x和y参数,但我不确定其他参数.根据Apple文档,它们是控制点,我猜它们就像你在矢量绘图程序中看到的那样,你可以调整曲线通过点的方式.
我的问题是如何在不知道这些坐标提前的情况下选择与我的坐标相关的点?我想也许只是从每个第一个控制点中减去一个设定的数量,并将相同的数量添加到第二个控制点,但这听起来过于简单.是否有一种标准方法可以生成对于平滑曲线"有意义"的控制点?
void CGPathAddCurveToPoint (
CGMutablePathRef path,
const CGAffineTransform *m,
CGFloat cp1x,
CGFloat cp1y,
CGFloat cp2x,
CGFloat cp2y,
CGFloat x,
CGFloat y
);
Run Code Online (Sandbox Code Playgroud) 我一直在尝试开发一个CALayer
基于"CardView"的对象,它有两个彼此背对的层,以呈现卡片的两面.我一直在处理类似doublesided
属性的事情,CALayer
并发现结果令人困惑.我的基类是CALayer
,我正在添加两个sublayers
,一个带有M_PI/2变换,并且两者都有,doublesided = NO
但就目前而言,无论我如何旋转卡而后面都没有显示,我得到正面显示.如果我不创建前面,后面显示两侧,文本在一个角落,而不是48点和模糊.
这是一个屏幕截图的链接,显示卡片刚刚在UIViewController's
视图中完成一次完整的旋转.你看到前面的后面.这应该是看不见的,背面应该显示......我想......
https://files.me.com/gazelips/lj2aqo
// CardView.h
#import <Foundation/Foundation.h>
#import <QuartzCore/QuartzCore.h>
#define kCardWidth 100.0f
#define kCardHeight 150.0f
@interface CardView : CALayer {
CALayer *cardFront, *cardBack;
}
@property (nonatomic, retain) CALayer *cardFront, *cardBack;
- (id)initWithPosition:(CGPoint)point;
- (void)addPerspective;
- (CALayer *)createFront;
- (CALayer *)createBack;
@end
Run Code Online (Sandbox Code Playgroud)
// CardView.m
#import "CardView.h"
@implementation CardView
@synthesize cardFront, cardBack;
static CATransform3D kPerspectiveTransform;
- (id)initWithPosition:(CGPoint)point {
NSLog(@"--initWithPosition:CardView");
self = [super init];
if (self != …
Run Code Online (Sandbox Code Playgroud) 我已经阅读了Apple的内存管理指南,我看不出这个案例的解释...
很多时候,特别是在编写类方法来返回类的实例时,我会像这样开始,因为这就是我看到它完成的方式,并且它有效.
[注意]这段代码来自内存 - 当我回到家里展示一个真正有用的例子时我会更新它(我做了这个来说明它,但显然我不记得它很好地构造了一些有意义的东西...
[编辑]这是我的实际方法 - 当然每个人都是对的,我必须打电话给alloc
我.
+ (id)player
{
Player *player = nil;
if ((player = [[[super alloc] initWithFile:@"rocket.png"] autorelease])) {
[player setProjectileType:kProjectileBullet];
[player setProjectileLevel:1];
[player setInvincible:YES];
[player setEmitter:[CCParticleSystemQuad particleWithFile:@"exhaust.plist"]];
[[player emitter] setPosition:ccp(0.0, player.contentSize.height/2)];
[player addChild:player.emitter];
}
return player;
}
Run Code Online (Sandbox Code Playgroud)
所以我从响应中得到的是:*声明实例只是给我一个指向内存位置的指针,并告诉Xcode该对象将是什么类.*将指针设置为nil几乎只是将其设置为零 - 保持它没有垃圾(对吧?)*由于我自动释放实例,返回的对象也是自动释放的.
谢谢你帮我理解这个!
我想创建一次动作,然后将其添加到多个精灵中.例如,我有一个"怪物",它会在身体上添加一堆腿.这些腿中的每一条都是身体的孩子,我希望它们来回旋转.我制作了CCRepeatForever
两个CCRotateBy
动作的序列,效果很好.我可以将动作添加到腿部,但是如果我将其添加到不同的腿部,则第一条腿不会旋转.
我不想为每条腿做出新的序列 - 多么痛苦!必须有一个简单的方法!
编辑:
根据gixdev和Lukman的回答,我按照这样实现了它(感谢AGAIN Lukman!)
[leg1 runAction:action]; // for the first time using the action
[leg2 runAction:[[action copy] autorelease]]; // for all subsequent uses
Run Code Online (Sandbox Code Playgroud) ios ×7
objective-c ×4
xcode ×3
calayer ×2
text ×2
action ×1
app-id ×1
cgpath ×1
cocoa-touch ×1
gps ×1
provisioning ×1
uiview ×1
xib ×1