我尝试创建一种方法来配置应用中的按钮。我的方法按预期执行,但阴影不会绘制。它没有崩溃。
我使用以下方法创建了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;
}
无效。
感谢任何进一步的想法/建议。
答案 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,则应将其更改为其他颜色,例如白色。