Добавление тени контура в UIView, который совместим с iOS 3.0 - PullRequest
2 голосов
/ 26 октября 2010

У меня есть два UIViewController A и B, и они добавляются в качестве подпредставлений в AppDelegate с B поверх A.

Когда нажата кнопка UIB на B, B скользит влево со следующим кодом:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(slideOutFinished)];
simonSaysView.view.frame = CGRectMake(40-BView.view.frame.size.width, BView.view.frame.origin.y, BView.view.frame.size.width, BView.view.frame.size.height);
[UIView commitAnimations];

На правом краю я хочу тень 20px, но я не могу использовать свойства тени BView.view.layer.shadow...., потому что это только 3.2 / 4.0 +.И производительность анимации ужасна, слайд очень сильно отстает (бегло без тени).

Я думаю использовать пользовательский UIView и сделать немного магии в drawRect, но возможно ли это или я могурисовать только в границах вида?

Надеюсь, некоторые из вас, ребята, могут помочь мне.

Приветствия objneodude

Ответы [ 2 ]

3 голосов
/ 26 октября 2010

Решено с помощью следующего кода

// Add drop shadow to the view.
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = CGRectMake(self.view.frame.size.width, 0, 30, self.view.frame.size.height);
gradientLayer.colors = [NSArray arrayWithObjects:
                        (id)[UIColor blackColor].CGColor,
                        (id)[UIColor clearColor].CGColor,
                        nil];
gradientLayer.startPoint = CGPointMake(-2, 0.5);
gradientLayer.endPoint = CGPointMake(1, 0.5);   
[self.view.layer addSublayer:gradientLayer];
0 голосов
/ 03 июня 2011

У меня была та же проблема, после попытки различных идей, я просто добавил подпредставление теневого цвета (серый) за UIView, мне нужно было иметь тень, см. Код: (Включен код для> 3.2.x / 4 .х также.

    /*Shaded/rounded borders on subviews*/
self.viewOne.layer.cornerRadius = 10;

self.viewOne.layer.borderColor = [UIColor darkGrayColor].CGColor;
self.viewOne.layer.borderWidth = 0.8;

self.viewTwo.layer.cornerRadius = 10;
self.viewTwo.layer.borderColor = [UIColor darkGrayColor].CGColor;
self.viewTwo.layer.borderWidth = 0.8;

self.viewThree.layer.cornerRadius = 10;
self.viewThree.layer.borderColor = [UIColor darkGrayColor].CGColor;
self.viewThree.layer.borderWidth = 0.8;

if (SYSTEM_VERSION_LESS_THAN(@"3.2")) {
    self.shadowOne.layer.cornerRadius = 10;
    self.shadowTwo.layer.cornerRadius = 10;
    self.shadowThree.layer.cornerRadius = 10;
}
else{
    //Use QuartzCore to make shadows etc.
    self.viewOne.layer.shadowColor = [[UIColor grayColor] CGColor];
    self.viewOne.layer.shadowOffset = CGSizeMake(2, 2);
    self.viewOne.layer.shadowOpacity = 0.6;
    self.viewOne.layer.shouldRasterize = YES;
    self.viewOne.layer.shadowRadius = 2;

    self.viewTwo.layer.shadowColor = [[UIColor grayColor] CGColor];
    self.viewTwo.layer.shadowOffset = CGSizeMake(2, 2);
    self.viewTwo.layer.shadowOpacity = 0.6;
    self.viewTwo.layer.shouldRasterize = YES;
    self.viewTwo.layer.shadowRadius = 2;

    self.viewThree.layer.shadowColor = [[UIColor grayColor] CGColor];
    self.viewThree.layer.shadowOffset = CGSizeMake(2, 2);
    self.viewThree.layer.shadowOpacity = 0.6;
    self.viewThree.layer.shouldRasterize = YES;
    self.viewThree.layer.shadowRadius = 2;
}
...