iOS: рисуем тень в UIView

#iphone #objective-c #ios #uiview #core-graphics

#iPhone #objective-c #iOS #uiview #ядро-графика

Вопрос:

Я нашел отличный код, который является подклассом UIView , который рисует этот вид с помощью тени. Затем я могу использовать это представление везде, где я хочу разместить тень:

 -(void) layoutSubviews {
    CGFloat coloredBoxMargin = 40;
    CGFloat coloredBoxHeight = self.frame.size.height;
    _coloredBoxRect = CGRectMake(coloredBoxMargin, 0, 40, coloredBoxHeight);
}

-(void) drawRect:(CGRect)rect {

    CGColorRef lightColor =  [UIColor colorWithRed:105.0f/255.0f green:179.0f/255.0f blue:216.0f/255.0f alpha:0.8].CGColor;
    CGColorRef shadowColor = [UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:0.4].CGColor;   

    CGContextRef context = UIGraphicsGetCurrentContext();
    // Draw shadow
    CGContextSaveGState(context);
    CGContextSetFillColorWithColor(context, lightColor);
    CGContextSetShadowWithColor(context, CGSizeMake(-13, 0), 10, shadowColor);

    CGContextFillRect(context, _coloredBoxRect);
    CGContextRestoreGState(context);
}
  

Создан с использованием следующего:

 UIViewWithShadowRight* verticalLineView2 = [[[UIViewWithShadowRight alloc] initWithFrame:CGRectMake(60, 0, 40 , self.view.frame.size.height)] autorelease];
[verticalLineView2 setBackgroundColor:[UIColor clearColor]];
[verticalLineView2 setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
[verticalLineView2 setClipsToBounds:NO];
[self.view addSubview:verticalLineView2];
[self.view bringSubviewToFront:verticalLineView2];
  

Проблема в том, что тень рисуется справа налево, как я могу изменить это и нарисовать слева направо?

Ответ №1:

Сделайте 13 положительный результат вместо отрицательного. Это смещение x нарисованной тени, при этом отрицательные значения находятся слева от исходного рисунка, а положительные значения — справа.

Комментарии:

1. Нет, похоже, это не помогает. Это заставляет тень исчезнуть.

2. Покажите свой код. Это фактический ответ, который вы ищете, поэтому, если вы видите разные результаты, это может быть связано с какой-то другой настройкой, которую вы изменили в графическом контексте.

3. Джонатан, я обновил свой пост кодом, используемым для создания представления.

4. Рисунок по-прежнему ограничен границами вида, поэтому тень не будет выводиться за его пределы. Сделайте вид шире, чем его содержимое.

Ответ №2:

Попробуйте изменить этот cgcontextset shadowwithcolor(контекст, CGSizeMake(-13, 0), 10, shadowColor); Замените текущее значение x (-13) на значение справа.