#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) на значение справа.