Подтвердить что ты не робот

IOS: Как добавить тень тени и тени на UIView?

Я хочу добавить тень отбрасывания и тень тень на UIView Это то, что мой дизайнер дал мне применить тень,

  • Для тени, он сказал мне использовать RGB (176,199,226) с 90% непрозрачностью, расстоянием-3 и размером-5

  • Для тени тени он сказал, чтобы применить RGB (209,217,226) размер-1 и 100% непрозрачность.

Это экран эффектов эффектов Photoshop,

enter image description hereenter image description here

Вид с требуемой тенью (ожидаемый результат)

enter image description here

Я попытался сделать следующее, чтобы получить тень

viewCheck.layer.masksToBounds = NO;
viewCheck.layer.cornerRadius = 5.f;
viewCheck.layer.shadowOffset = CGSizeMake(.0f,2.5f);
viewCheck.layer.shadowRadius = 1.5f;
viewCheck.layer.shadowOpacity = .9f;
viewCheck.layer.shadowColor = [UIColor colorWithRed:176.f/255.f green:199.f/255.f blue:226.f/255.f alpha:1.f].CGColor;
viewCheck.layer.shadowPath = [UIBezierPath bezierPathWithRect:viewCheck.bounds].CGPath;

И это результат этого,

enter image description here

У меня возникла проблема в понимании того, как я могу применить штрих и тень, как показано на скриншотах фотошоп (я добавил выше). Как применять расстояние, размах, размер, положение?

Может ли кто-нибудь указать мне руководство к применению этих теней? Там появилось много теневых эффектов, и я хочу узнать, как это возможно, вместо того, чтобы задавать каждый из вопросов здесь!

Спасибо:)

4b9b3361

Ответ 1

Я считаю, что большую часть конфигурации вы можете найти, используя свойство shadowPath.

viewCheck.layer.shadowRadius  = 1.5f;
viewCheck.layer.shadowColor   = [UIColor colorWithRed:176.f/255.f green:199.f/255.f blue:226.f/255.f alpha:1.f].CGColor;
viewCheck.layer.shadowOffset  = CGSizeMake(0.0f, 0.0f);
viewCheck.layer.shadowOpacity = 0.9f;
viewCheck.layer.masksToBounds = NO;

UIEdgeInsets shadowInsets     = UIEdgeInsetsMake(0, 0, -1.5f, 0);
UIBezierPath *shadowPath      = [UIBezierPath bezierPathWithRect:UIEdgeInsetsInsetRect(viewCheck.bounds, shadowInsets)];
viewCheck.layer.shadowPath    = shadowPath.CGPath;

например, установив shadowInsets таким образом

UIEdgeInsets shadowInsets = UIEdgeInsetsMake(0, 0, -1.5f, 0);

вы получите приятную тень:

введите описание изображения здесь

Теперь вы можете решить, как вы хотите, чтобы теневой прямоугольник был создан, управляя вставками прямоугольника теневого пути.

Ответ 2

Ниже приведены шаги для User Defined Runtime Attribute.

  • Откройте файл раскадровки или xib в интерфейсе Builder.
  • В Interface Builder выберите объект для добавления атрибута.
  • Выберите "Просмотр" > "Утилиты" > "Показать инспектор идентификаторов".

В области служебных программ появится инспектор удостоверений. Как показано ниже, пользовательский редактор атрибутов времени выполнения является одним из элементов в инспекторе.

введите описание изображения здесь

  1. Нажмите кнопку "Добавить" (+) в левом нижнем углу пользовательского редактора атрибутов времени исполнения.

введите описание изображения здесь

Ответ 3

Для параметра Пограничный Of UIView.

Добавьте работу фрейма #import "QuartzCore/QuartzCore.h".

myView.layer.cornerRadius = 15.0; // set as you want.
myView.layer.borderColor = [UIColor lightGrayColor].CGColor; // set color as you want.
myView.layer.borderWidth = 1.0; // set as you want.

Ответ 4

Извините, у меня есть только решение Swift, но у меня есть расширения UIView, которые я использую для выполнения этой задачи:

// MARK: Layer Extensions
extension UIView {

    func setCornerRadius(#radius: CGFloat) {
        self.layer.cornerRadius = radius
        self.layer.masksToBounds = true
    }

    func addShadow(#offset: CGSize, radius: CGFloat, color: UIColor, opacity: Float, cornerRadius: CGFloat? = nil) {
        self.layer.shadowOffset = offset
        self.layer.shadowRadius = radius
        self.layer.shadowOpacity = opacity
        self.layer.shadowColor = color.CGColor
        if let r = cornerRadius {
            self.layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: r).CGPath
        }
    }

    func addBorder(#width: CGFloat, color: UIColor) {
        self.layer.borderWidth = width
        self.layer.borderColor = color.CGColor
        self.layer.masksToBounds = true
    }

    func drawStroke(#width: CGFloat, color: UIColor) {
        let path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: self.w, height: self.w), cornerRadius: self.w/2)
        let shapeLayer = CAShapeLayer ()
        shapeLayer.path = path.CGPath
        shapeLayer.fillColor = UIColor.clearColor().CGColor
        shapeLayer.strokeColor = color.CGColor
        shapeLayer.lineWidth = width
        self.layer.addSublayer(shapeLayer)
    }

}

Я никогда не пробовал, но вы можете просто вставить этот код в любой файл Swift и, вероятно, вызвать их из кода Obj-C.