背景:我在iOS 5中启动了我的项目,并构建了一个带图层的漂亮按钮.我在按钮上添加了一个textLayer,并使用以下代码将其居中:
float textLayerVerticlePadding = ((self.bounds.size.height - fontSize) /2);
textLayer = [[CATextLayer alloc]init];
[textLayer setFrame:CGRectOffset(self.bounds, 0, textLayerVerticlePadding)];
Run Code Online (Sandbox Code Playgroud)
它工作得很好,看起来已经死了,直到iOS 6.
问题: iOS 6在textLayer中最顶层边界和文本之间添加了一个空格(填充).这扰乱了上面的计算.有没有办法确保iOS 6没有?因为我想支持iOS 5和6(对于那些喜欢谷歌地图的人).
图片:
这个是iOS 5,红色是textLayer的背景(使其更加明显)

这个是iOS 6

更新:虽然我确定下面的所有答案都是以他们自己的方式是正确的,但我发现这个帖子是第一个最简单的方法来执行它.HelveticaNeue为iOS5和iOS6留下了一点空间,不像Helvetica在iOS5中顶部没有空间,在iOS6中没有空间.
更新2:再玩一下,找出小空间的大小.没有详细说明,空间是字体大小的1/6.所以为了弥补它,我写道
float textLayerVerticlePadding = ((self.bounds.size.height - fontSize) /2) - (fontSize/6);
[textLayer setFrame:CGRectOffset(self.bounds, 0, textLayerVerticlePadding)];
Run Code Online (Sandbox Code Playgroud)
有了这段代码,我每次都会得到一个死角.请注意,这仅HelveticaNeue-Bold在iOS5和iOS6上进行了测试.我不能说其他任何事情.
Qeustion:几乎与标题中所述相同.我查看了互联网,但找不到任何易于理解的内容.我有NSArray很多NSValue.NSValue每个人都持有一个CGPoint.我希望在x那之前按y秒排序.
一些代码:
NSValue * valuePointObject = [NSValue valueWithCGPoint:CGPointMake(x, y)];
NSArray *array = [[NSArray alloc] initWithObjects: valuePointObject, valuePointObject2, ..., nil];
Run Code Online (Sandbox Code Playgroud) 问题:如何编写一个函数来检查并返回一个字符串(NSString)是否在全球范围内包含有效的邮政编码.
附加信息:我知道iOS中的RegEx.但是我不是那么流利.请记住,这应该接受在任何国家/地区都有效的任何内容.
例子
美国 - "10200"
美国 - "33701-4313"
加拿大 - "K8N 5W6"
英国 - "3252-322"
等等
编辑:投票或关闭问题的人请提及原因.谢谢.
我想在我的应用程序中使用"Shake Device"事件 - 即,当用户摇动设备时会发生一些事情.我试着实施:
-(void) motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (event.subtype == UIEventSubtypeMotionShake) {
//something happens
}
}
Run Code Online (Sandbox Code Playgroud)
它似乎不起作用.......
有谁知道我应该使用哪种方法?