В iOS drawRect не может рисовать за пределами границ представления?
С какой-то точки зрения я подумал о OS X и всегда верен для iOS, что контент может появляться за пределами границ представления? (для UIView) Но если я создаю совершенно новое приложение Single View и создаю класс MyView, который подклассифицирует UIView и реализует его drawRect:
- (void)drawRect:(CGRect)rect
{
// Drawing code
UIBezierPath *path = [UIBezierPath bezierPathWithRect:
CGRectMake(-20, -20, 600, 600)];
[[UIColor greenColor] set];
[path fill];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [[UIColor blueColor] CGColor]);
CGContextFillRect(context, CGRectMake(-20, -20, 600, 600));
}
Я использую как UI, так и CG, чтобы рисовать прямоугольник каждый, на случай, если один работает, а другой - нет. И представление добавляется в viewDidAppear
:
- (void)viewDidAppear:(BOOL)animated {
MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(20, 20, 260, 260)];
[self.view addSubview:myView];
}
Но независимо от того, цветная коробка не выйдет за пределы области (20, 20, 260, 260)
. Верно ли, что только CALayers могут быть свободно добавлены и появляться за пределами границ обзора? Может ли это из-за того, что графический контекст ограничивается этим (20, 20, 260, 260)
для начала? Если да, существует ли способ сделать содержимое drawRect
отображаться вне рамки просмотра во всех четырех верхних, нижних, левых, правых направлениях?
Ответы
Ответ 1
Ваша проблема в том, что "drawRect" автоматически привязывается к виду, которое вы рисуете.
Вместо того, чтобы делать чертеж в самом представлении, добавьте второй (дополнительный) вид в первый вид, который выходит за пределы первого представления. Это позволит вам сделать чертеж, который зависит от размещения первого представления, но находится за пределами границ первого представления.
Надеюсь, что это поможет.
Ответ 2
Попробуйте это в представлении, где вы добавили scrollView:
self.scrollView.backgroundColor = [UIColor darkGrayColor];
self.scrollView.layer.cornerRadius = 10.0f;
self.scrollView.layer.masksToBounds = YES;
Он должен отображать серое прокручивание с закругленными углами, как вы хотите.
Помните, что вам нужно импортировать QuartzCore FrameWork