2013-07-06 171 views
19

我想加上UIView 這是我的設計師給我申請陰影陰影中風陰影iOS:如何在UIView上添加投影和筆觸陰影?

  • 對於陰影,他告訴我使用RGB(176199226)與90%的不透明度,距離-3和大小-5

  • 對於中風影子,他告訴申請,大小1和100%不透明度的RGB(209,217,226)。

這是Photoshop中應用了效果的屏幕,

enter image description hereenter image description here

具有所需陰影的視圖(預期輸出)

enter image description here

我嘗試以下得到t他陰影

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

我瞭解如何申請中風和陰影的顯示到Photoshop的截圖有問題(我上面已經添加了)。如何申請距離,傳播,大小,位置?

有人能指點我應用這些陰影的指南嗎?有很多陰影效果出來,我想了解如何才能做到這一點,而不是問這裏的每個問題!

謝謝:)

回答

22

我相信大多數的配置你看可以通過採用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); 

,你會得到一個不錯的理想陰影:

enter image description here

現在,你想怎麼陰影矩形是可以決定通過控制陰影路徑矩形插入來構造。

6

對於給邊境UIView

添加#import "QuartzCore/QuartzCore.h" fram工作。

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. 
+0

myView.layer.shadowColor = ...; – mnl

+0

myView.layer.shadowOffset = ...; – mnl

8

以下是User Defined Runtime Attribute的步驟。

  1. 在Interface Builder中打開故事板或xib文件。
  2. 在Interface Builder中,選擇要添加屬性的對象。
  3. 選擇視圖>實用程序>顯示標識檢查器。

Identity inspector出現在實用工具區中。如下所示,用戶定義的運行時屬性編輯器是檢查器中的一個項目。

enter image description here

  • 在用戶定義的運行時的左下點擊添加按鈕(+)的屬性的編輯器。
  • enter image description here

    2

    我很抱歉,我只有雨燕的解決方案,但繼承人,我用做這個任務我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代碼中調用它們。