我有这样的情况:
如果我点击左脚按钮,我希望第二个控制器中的视图显示左脚图像,如果我点击右键,则视图应显示右脚图像。
在第一个控制器中,我写了这个以选择向右或向左:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
RSViewController *vc = [segue destinationViewController];
if ([[segue identifier] isEqualToString:@"Left-Foot"])
[vc setLeft:YES];
else
[vc setLeft:NO];
}
在第二个控制器中,我有一个设置布尔值
的方法- (void)setLeft:(BOOL)left
{
if (left) {
_left = left;
NSLog(@"LEFT UPDATED IN RSVIEWCONTROLLER");
}else {
_left = left;
NSLog(@"RIGHT UPDATED IN RSVIEWCONTROLLER");
}
}
在同一个控制器中我使用我的一个init在viewdidload中创建我的视图:
- (void)viewDidLoad
{
NSLog(@"meeeea");
[super viewDidLoad];
CGRect rect = CGRectMake(0, 0, 100, 100);
self.animatedCircleView = [[RSAnimatedCircleView alloc] initWithFrameFoot:rect foot:YES];
NSLog(@"Viewdidnoload");
}
在我看来(图中的小蓝色矩形):
- (void)setup:(BOOL)left
{
self.leftFoot = left;
}
- (void)setLeftFoot:(BOOL)leftFoot
{
_leftFoot = leftFoot;
}
- (void)awakeFromNib
{
[self setup:_leftFoot];
}
- (id)initWithFrameFoot:(CGRect)frame foot:(BOOL)left
{
self = [super initWithFrame:frame];
[self setup:left];
self.leftFoot = left;
if (self.leftFoot)
NSLog(@"Left == TRUE");
return self;
}
- (RSFootView *)footView
{
CGRect rect = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
if (self.leftFoot) {
NSLog(@"Now left is yes");
}else {
NSLog(@"left is no");
}
_footView = [[RSFootView alloc] initWithFrame:rect withLeftFoot:self.leftFoot];
[_footView setBackgroundColor:[UIColor clearColor]];
return _footView;
}
- (void)drawRect:(CGRect)rect
{
if (self.leftFoot)
NSLog(@"left ada");
else
NSLog(@"right masd");
CGFloat x = self.bounds.size.height;
CGFloat y = self.bounds.size.width;
CGFloat radius = x/2 - 15;
CGPoint center = CGPointMake(x/2, y/2);
CGFloat startAngle = DEGREES_TO_RADIANS(START_ANGLE);
CGFloat endAngle = DEGREES_TO_RADIANS(END_ANGLE);
// Drawing the sector
UIBezierPath *sector = [UIBezierPath bezierPathWithArcCenter:center
radius:radius
startAngle:startAngle
endAngle:endAngle
clockwise:YES];
sector.lineWidth = 4;
[[UIColor grayColor] setStroke];
[sector stroke];
[self setBackgroundColor:[UIColor clearColor]];
[sector addClip];
[self addSubview:self.footView];
}
在方法“drawRect”中,leftfoot值始终为false。我不知道为什么会这样......任何人都可以帮助我吗?
谢谢
答案 0 :(得分:2)
您每次在以下行中将视图设置为“左”。
self.animatedCircleView = [[RSAnimatedCircleView alloc]
initWithFrameFoot:rect foot:YES];
这是一个典型的错误,在不给你的变量和方法可理解和直观的名称时变得非常可能。如果你不修补你的方式,预计会经常发生这种类型的错误。
我会给你的视图一个枚举属性,明确说明它是什么:
typedef enum {LeftFoot, RightFoot} FootType;
@property (strong, nonatomic) FootType footType;
另外,您应该修改方法名称。我会完全取消initWithFrameFoot
方法,只需在initWithFrame
的覆盖中设置默认英尺。 (将其保留为0 LeftFoot
。)使用@synthesize
,您也不需要设置者或吸气剂。删除它们。
如果您需要专用的初始化程序,请确保传递的变量实际上前面有正确的单词。
-(id) initWithFrame:(CGRect)rect andFootType:(FootType)footType {
self = [super initWithFrame:rect];
if (self) {
_footType = footType;
}
return self;
}
使用@synthesize
后,您可以在prepareForSegue:
footViewController.footType = rightFoot;