【发布时间】:2014-06-05 10:51:41
【问题描述】:
我有一个 UIView 可以根据捏合手势调整自身大小。我还在上面视图的drawrect中绘制了两条线。我注意到当视图调整大小时,线条的粗细会发生变化。知道为什么吗?
我的控制器类中的代码
- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer {
recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
recognizer.scale = 1;
}
UIView 子类中的代码
- (void)drawRect:(CGRect)rect
{
NSLog(@"Drawing code");
[super drawRect:rect];
CGContextRef c = UIGraphicsGetCurrentContext();
CGFloat red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
CGContextSetStrokeColor(c, red);
CGContextBeginPath(c);
CGContextMoveToPoint(c, 20.0f, 5.0f);
CGContextAddLineToPoint(c, 20.0f, rect.size.height);
CGContextStrokePath(c);
CGContextSetStrokeColor(c, red);
CGContextBeginPath(c);
CGContextMoveToPoint(c, 0.0f, rect.size.height - 20);
CGContextAddLineToPoint(c, rect.size.width - 20, rect.size.height - 20);
CGContextStrokePath(c);
}
在阅读了答案和建议后,我尝试了以下方法,
- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer {
recognizer.view.frame = CGRectApplyAffineTransform(recognizer.view.frame, CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale));
}
但它给了我以下错误,
【问题讨论】:
-
这是因为您正在更改 view.transform。尝试在 handlePinch: 中更改视图框架,然后调用 [view needsLayout] 方法。
标签: ios objective-c uiview