我是iOS上的新开发者,我正在努力使用DrawRect方法:第一次调用它时,它实际上在我想要的地方绘制了我想要的内容,但是所有下一次调用DrawRect都无法移动我的视图(虽然他们确实调整了它)
因此,我制作了一个极简主义的测试应用程序来重现我的问题,但仍无法找出原因
这个应用程序只是在左上角绘制一个蓝色矩形,每次你点击它,它应该是:
当然我检查了DrawRect实际上被调用了,它的界限确实改变了我想要的,但是,我的观点仍然不想移动。
============================================== <登记/>
这是我的ViewController(RVTViewController.m)
==============================================
@implementation RVTViewController
(void)viewDidLoad`
{
[super viewDidLoad];
if (!self.myView)
{
CGRect viewBounds = CGRectMake(0,0,100,150);
self.myView = [[RVTView alloc] initWithFrame:viewBounds];
[self.view addSubview:self.myView];
UITapGestureRecognizer* gestRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
[self.myView addGestureRecognizer:gestRec];
}
}
-(void) tap:(UITapGestureRecognizer*) gesture
{
CGRect newViewBounds = CGRectMake(self.myView.bounds.origin.x + 10,
self.myView.bounds.origin.y,
self.myView.bounds.size.height,
self.myView.bounds.size.width);
self.myView.bounds = newViewBounds;
[self.myView setNeedsLayout];
[self.myView setNeedsDisplay];
}
@end
=====================================
这是我的自定义视图(RVTView.m)
=====================================
@implementation RVTView
- (void)drawRect:(CGRect)rect
{
CGRect newBounds = self.bounds;
UIBezierPath* newRect = [UIBezierPath bezierPathWithRect:newBounds];
[[UIColor blueColor] setFill];
UIRectFill(self.bounds);
[newRect stroke];
}
@end
有人可以告诉我我的错误吗?
答案 0 :(得分:-1)
使用[self.myView setFrame:newViewBounds];
代替self.myView.bounds = newViewBounds;
解决了问题。