尝试创建属性,因此我可以在类的实例上设置CGfloat数组值。很难搞清楚如何做到这一点。 CGFloat需要具有“size”[2]变量和数字组件,如下所示:
CGFloat locations[2] = {1.0, 0.0};
在我尝试从实例设置这些值之前创建属性之前,这是它在类本身中看起来的样子(这是有效的)(这通过UIView sunclass中的drawRect创建一个渐变BTW):
CGContextRef context = UIGraphicsGetCurrentContext();
CGColorSpaceRef myColorspace=CGColorSpaceCreateDeviceRGB();
CGFloat locations[2] = {1.0, 0.0};
CGFloat components[8] = { 1.0, 0.0, 0.0, 1.0, 0.5, 0.25, 1.0, 1.0 };
CGGradientRef myGradient = CGGradientCreateWithColorComponents(myColorspace, components,locations, num_locations);
CGContextDrawLinearGradient (context, myGradient, myStartPoint, myEndPoint, 0);
我尝试在.h
中创建如下所示的属性@property (nonatomic, assign) CGFloat locations;
和.m
@synthesize locations;
但是我无法弄清楚如何从实例中正确设置[size]和组件的值。我设置属性时也会出错:错误:“将'CGFloat'(又名'浮动')传递给不兼容类型'const CGFloat *'(又名'const float *')的参数;将地址带到&”
你可以在这里看到这个项目你想看看tinyurl.com/cmgy482任何帮助都非常感激。
答案 0 :(得分:3)
理想情况下,你可以像这样声明你的财产:
@property (nonatomic) CGFloat locations[2];
唉,clang不允许你创建一个数组类型的属性。
另一种方法是使用指针类型。您可能希望编写注释来解释它指向的元素数量:
#define kMyClassLocationCount 2
// This is an array of kMyClassLocationCount elements. The setter copies
// the new elements into existing storage.
@property (nonatomic) CGFloat *locations;
要实现它,您需要创建实例变量并定义getter和setter:
@implementation MyClass {
CGFloat _locations[kMyClassLocationCount];
}
- (CGFloat *)locations {
return _locations;
}
- (void)setLocations:(CGFloat *)locations {
memcpy(_locations, locations, kMyClassLocationCount * sizeof *_locations);
}
请注意,您不需要@synthesize
,因为您已明确定义@synthesize
可能生成的所有内容。
当您使用该类的实例时,您可以阅读如下所示的单个位置:
CGFloat location1 = myInstance.locations[1];
你可以像这样设置一个单独的位置:
myInstance.locations[0] = 0.5;
您可以像这样一次设置所有位置:
CGFloat newLocations[2] = { 7, 11 };
myInstance.locations = newLocations;
答案 1 :(得分:3)
从另一个答案中找到:"C arrays are not one of the supported data types for properties".我认为这是我的问题。我使用的解决方案是使属性成为NSMutableArray并将值转换为CGFloat。
·H
@property (nonatomic, retain) NSMutableArray *locations;
的.m
CGFloat locationsFloat[[locations count]];
for (int i = 0; i < [locations count]; i++) {
NSNumber *number = [locations objectAtIndex:i];
locationsFloat[i] = [number floatValue];
}
的viewController
- (void)viewDidLoad
{
NSMutableArray *arrayPoints = [[NSMutableArray alloc]init];
[arrayPoints addObject:[NSNumber numberWithFloat:1.0]];
[arrayPoints addObject:[NSNumber numberWithFloat:0.0]];
[myInstance setLocations:arrayPoints];
...
答案 2 :(得分:2)
我认为你有更好的代码:
NSArray * locations = [[NSArray alloc ] initWithObjects:[NSNumber numberWithFloat:1.0f],[NSNumber numberWithFloat:0.0f],nil];