- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 iOS 中,有两个 C 结构表示描述可绘制形状的路径:CGPathRef 和 CGMutablePathRef。从他们的名字看来,CGPathRef 指的是一旦创建就不能更改的路径,而 CGMutablePathRef 指的是可修改的路径。然而,事实证明,CGPathRef 可以传递给需要 CGMutablePathRef 的函数,在我看来唯一的区别是前者会在传递给它的函数修改路径时生成警告,而后者不会吨。例如下面的程序:
#import <UIKit/UIKit.h>
@interface TestView : UIView {
CGPathRef immutablePath;
CGMutablePathRef mutablePath;
}
@end
@implementation TestView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
mutablePath = CGPathCreateMutable();
immutablePath = CGPathCreateCopy(mutablePath); // actually you might just do "immutablePath = CGPathCreateMutable();" here - The compiler doesn't even complain
self.backgroundColor = [UIColor whiteColor];
}
return self;
}
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touchesBegan executed!");
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddPath(context, immutablePath);
CGPathAddRect(immutablePath, NULL, CGRectMake(100.0, 100.0, 200.0, 200.0)); // generates a warning specified later
CGContextFillPath(context);
}
@end
@interface TestViewController : UIViewController
@end
@implementation TestViewController
@end
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
@implementation AppDelegate
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
// Instantiate view controller:
TestViewController *vc = [[TestViewController alloc] init];
vc.view = [[TestView alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
return YES;
}
@end
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, @"AppDelegate");
}
}
这是编译器给出的警告:将“CGPathRef”(又名“const struct CGPath *”)传递给“CGMutablePathRef”(又名“struct CGPath *”)类型的参数会丢弃限定符
也许我忽略了这里的重点,但这两者之间是否还有其他区别,除了提醒程序员他可能不打算修改(由 CGPathRef 引用的)路径?
最佳答案
在 C 语言中,将错误的类型传递给函数是可能的,但这几乎总是不是一个好主意。即使从技术上讲它们似乎被定义为同一事物,Apple 也可能有充分的理由将它们作为不同的事物。很可能是为了让代码更具可读性和可理解性,或者 Apple 计划稍后进行更改。
毕竟,跳转到定义揭示了真正的区别:
typedef struct CGPath *CGMutablePathRef;
typedef const struct CGPath *CGPathRef;
CGPathRef
是一个 const typedef
(如果您不太确定它的作用,请谷歌它)。但是 C 允许您打破 const 定义,这就是为什么您仍然能够将 CGPathRef
传递给需要 CGMutablePathRef
的函数并对其进行适当修改的原因。它还解释了为什么会抛出 discards qualifiers
警告。
关于ios - CGPathRef 与 CGMutablePathRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9321462/
我有这个代码: CGPathRef cgPath = [path quartzPath]; self.blackLine.path = cgPath; self.whiteDashe
有没有办法找出两个 CGPathRef 是否相交。就我而言,所有 CGPath 都有 closePath。 例如,我有两条路径。一条路径是旋转一定角度的矩形,另一条路径是弯曲路径。两条路径的原点会经常
我的SKSpriteNode在逆时针方向上遵循此路径,我如何使其沿顺时针方向遵循路径? 提前致谢! CGPathRef circle = CGPathCreateWithEllipseInRe
我是 cocoa 核心图形的新手。我有一张鸡蛋的图片,我正在使用 Sprite 工具包来模拟鸡蛋自由落体的物理现象。我需要设置鸡蛋的 physicsBody 属性。如何为此目的创建一个椭圆形的 CGP
我们如何获取特定字符串的路径?我刚发现 CTFontCreatePathForGlyph 会给出 CGPathRef ,但它会是文本的轮廓。例如字母“O”我从上面的方法得到的路径就像一个圆圈..看看我
请问我们怎样才能得到法语字母的特定阿拉伯语路径?我刚刚发现 CTFontCreatePathForGlyph 会给 CGPathRef 之类的,但它会是文本的轮廓。 我需要这个真实的文本路径来显示文本
我正在使用 SKShapeNodes 通过在用户触摸屏幕时更新路径属性来动态绘制线条。这条线完成后,我想在路径的末端附加一条新的固定长度垂直线。 我已经研究了 CGAffineTransform 以根
所以我有一个 SKSpriteNode,它应该从屏幕中间拖动,放开,然后平滑地流到最近的角(或者更确切地说,从最近的角在每个轴上 10 个点)。 我使用的方法应该返回一个 CGPathRef,原点在节
我试图通过 CGPathRefs 将文本分成所有不同的部分。例如,L 有一条路径,而 ?有两个(点和其余部分)。 目前,我能够将每个字母作为路径,但是在“?”的示例中该路径同时包含点和其余部分。我想将
我正在寻找一些算法或某种方式,甚至是一些引用资料,它们可以让我从 CGPathRef 生成一组矩形。 考虑以下情况: 在路径中添加一个矩形 CGMutablePathRef pathref = CGP
在我的 iOS 游戏中,我试图沿着路径移动对象(见下文): 我想将上面的三角形移动到框的底部。 但是我不知道如何很好地使用CGPathRefs。这是我正在尝试的: CGMutablePathRef p
在 iOS 中,有两个 C 结构表示描述可绘制形状的路径:CGPathRef 和 CGMutablePathRef。从他们的名字看来,CGPathRef 指的是一旦创建就不能更改的路径,而 CGMut
我有一个由 n 个重叠矩形创建的 CGPath。是否有 API 可以获取原始路径的新路径?或者是否可以通过填充原始路径或创建剪切路径来做一些聪明的事情? 做不到这些,您能推荐一本关于 bool 路径运
我必须创建一个 CGPathRef 来模拟 Sprite Kit 中的物理属性。 我正在尝试通过一半圆形加一半椭圆形创建蛋形路径。鸡蛋的比例是0.4(半圆底部)到0.6(半椭圆上部);但是,我不知道为
有一种方法可以使用 CorelDraw 或 Adobe Flash 等应用程序绘制复杂的形状,将其保存或导出为 PDF,然后在 iOS 中使用 Core Graphics 打开它。这个想法是,用
是否可以对 CGPathRef 变量进行编码?我的意思是 CGPathRef 变量有类似 encodeObject:forKey 的方法吗? 最佳答案 是的,有 - 我已经这样做了:https://g
大家好我一直在 map 应用程序中工作,我需要在两个位置之间绘制路线,我也有路线坐标(使用 google Direction api)并将其保存在一个数组中,现在我只需要要做的是从点数组创建路径,稍后
给定一个CGPathRef,如何找到沿路径的 1/3 点? 我正在开发一款纸牌游戏,想向玩家展示他们的牌呈扇形展开的弧形。它们的间距应该相等,具体取决于它们拥有的卡片数量。 谢谢 最佳答案 不要尝试为
在 Apple 文档中,他们为您提供了如何将 NSBezierPath 转换为 CGPathRef 的代码。我需要反过来转换,从 CGPathRef 到 NSBezierPath。 UIBezierP
鉴于我有一个 CGPathRef,或一个 UIBezierPath,或其他一些等效的 iOS 表示,是否有内置的库函数可用于计算剪辑这个对象给我? 我特别需要针对轴对齐的矩形进行裁剪。 如果能够针对另
我是一名优秀的程序员,十分优秀!