Objective-C新手的位,我環顧四周尋找答案,但一直未能找到一個如此原諒我,如果這是一個明顯的問題。繼承UIView - 丟失實例變量
基本上,我需要繪製一個圓的屏幕段(例如,一個90度的段,其中水平線和垂直線在左下方相交併且一條圓弧連接終點)。我設法在一個名爲CircleSegment的自定義類中實現此功能,該類繼承UIView並覆蓋drawRect
。
我的問題是實現這個編程;我需要一些創建CircleSegment類的方法,並在之前存儲它所需的角度,它會繪製段本身。
這是我到目前爲止有:
CircleSegment.h
#import <UIKit/UIKit.h>
@interface CircleSegment : UIView {
float angleSize;
UIColor *backColor;
}
-(float)convertDegToRad:(float)degrees;
-(float)convertRadToDeg:(float)radians;
@property (nonatomic) float angleSize;
@property (nonatomic, retain) UIColor *backColor;
@end
CircleSegment.m
#import "CircleSegment.h"
@implementation CircleSegment
@synthesize angleSize;
@synthesize backColor;
// INITIALISATION OVERRIDES
// ------------------------
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
self.opaque = NO;
self.backgroundColor = [UIColor clearColor];
}
return self;
}
- (void)setBackgroundColor:(UIColor *)newBGColor
{
// Ignore.
}
- (void)setOpaque:(BOOL)newIsOpaque
{
// Ignore.
}
// MATH FUNCTIONS
// --------------
// Converts degrees to radians.
-(float)convertDegToRad:(float)degrees {
return degrees * M_PI/180;
}
// Converts radians to degrees.
-(float)convertRadToDeg:(float)radians {
return radians * 180/M_PI;
}
// DRAWING CODE
// ------------
- (void)drawRect:(CGRect)rect {
float endAngle = 360 - angleSize;
UIBezierPath* aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 100)
radius:100
startAngle:[self convertDegToRad:270]
endAngle:[self convertDegToRad:endAngle]
clockwise:YES];
[aPath addLineToPoint:CGPointMake(100.0, 100.0)];
[aPath closePath];
CGContextRef aRef = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(aRef, backColor.CGColor);
CGContextSaveGState(aRef);
aPath.lineWidth = 1;
[aPath fill];
[aPath stroke];
//CGContextRestoreGState(aRef);
}
- (void)dealloc {
[super dealloc];
}
@end
注意,.m文件是有點亂用各種測試代碼位...
所以基本上我想創建一個CircleSegment的實例,在angleSize屬性中存儲一個角度,根據該角度繪製一個線段,然後將該視圖添加到主應用視圖以顯示它...
嘗試而做到這一點,我已經添加下面的測試代碼viewDidLoad
在我的ViewController:
CircleSegment *seg1 = [[CircleSegment alloc] init];
seg1.backColor = [UIColor greenColor];
seg1.angleSize = 10;
[self.view addSubview:seg1];
看來存儲的UIColor和angleSize很好,當我斷點那些地方,但是如果我把一個斷點在drawRect
我在CircleSegment.m上覆蓋,這些值已恢復爲零值(或任何正確的術語將是,請隨時糾正我)。
我真的很感激,如果有人能指出我在正確的方向!
謝謝
Aaaaaack,你完全正確。我會使用界面生成器將CircleSegment拖到我的ViewController上,並且我的斷點首先觸擊了_that_實例。這很煩人,你可能會錯過簡單的事情。所有的工作現在,謝謝! – Rich 2010-12-21 18:08:58