UIButton阴影不绘图

时间:2016-10-06 01:47:10

标签: ios swift uibutton swift3

我尝试创建一种方法来配置应用中的按钮。我的方法按预期执行,但阴影不会绘制。它没有崩溃。

我使用以下方法创建了UIButton extension

func configureWhiteText(withBackgroundColor buttonColor: UIColor?) {
    // basic configuration
    tintColor = UIColor.white
    setTitleColor(UIColor.white, for: .normal)
    backgroundColor = buttonColor

    // layer stuff
    layer.drawsAsynchronously = true
    layer.shouldRasterize = true
    layer.cornerRadius = 10.0
    layer.masksToBounds = false
    layer.shadowColor = UIColor.black.cgColor
    layer.shadowOffset = CGSize(width: 5.0, height: 5.0)
    layer.shadowRadius = 5.0
}

我已经UITableViewController viewDidLoad内的myButton.configureWhiteText(withBackgroundColor: UIColor.blue) 尝试了,并且在没有运气的情况下查看了威胁:

UITableViewController

按钮位于layer.cornerRadius的分组静态单元格中。除了面向阴影的代码行之外,一切都在配置方法中工作。 layer正如预期的那样绕过角落,但是其他layer.masksToBounds = false导向的线都没有画出阴影。

我已验证layer.drawsAsynchronously。我也尝试评论layer.shouldRasterize#include <string.h> #include <stdio.h> #include <stdlib.h> //declaring a struct struct node { char *name; int num; struct node *next; }; struct node *list=NULL; /* * insert() */ struct node *insert(char word2[], int val){ struct node *tmp; tmp = malloc(sizeof(struct node)); if(tmp ==NULL){ fprintf(stderr, "out of memory\n"); exit(1); } tmp->name = strdup(word2); tmp->num = val; tmp->next = list; list = tmp; return tmp; }//read string void print(){ struct node *ptr; for(ptr= list; ptr!=NULL; ptr = ptr->next){ printf(" %s/%d\n", ptr->name, ptr->num); }//for loop }//print void sort(){ struct node *ptr1, *ptr2; char *tmp; for(ptr1 = list; ptr1!=NULL; ptr1 = ptr1->next){ for(ptr2 = ptr1->next; ptr2!=NULL; ptr2 = ptr2->next){ if(strcmp(ptr1->name, ptr2->name)>0){ //ptr1->name is "greater than" ptr2->name - swap them tmp = ptr1->name; ptr1->name = ptr2->name; ptr1->name = tmp; } } } }//sort int main (){ char buff[81]; int status=0; int len; char word1[20]; char word2[20]; int val; // char word3[20]; while(fgets(buff, 81, stdin)>0){ len = strlen(buff); if(buff[len-1]!='\n'){ fprintf(stderr,"Error: string line length was too long\n"); exit(1); } sscanf(buff, "%s %s %d", word1, word2, &val); if(strcmp(word1, "insert")==0){ insert(word2, val); sort(); }else if(strcmp(word1, "print")==0){ print(); }else{ } }//while loop return status; } 无效。

感谢任何进一步的想法/建议。

3 个答案:

答案 0 :(得分:5)

您遗漏了实际打开阴影的设置 - shadowOpacity。添加以下行:

layer.shadowOpacity = 0.5

Badda bing badda boom。

答案 1 :(得分:1)

您需要设置阴影路径,假设它在uibutton扩展名

self.layer.shadowPath = UIBezierPath(roundedRect: self.bounds, cornerRadius: 20).CGPath

答案 2 :(得分:0)

对于像我这样的人,即使layer.shadowOpacity设置为非零值,仍然可能会遇到相同的问题。如果您的按钮背景颜色为UIColor.clear,则应将其更改为其他颜色,例如白色。