问题描述
我想为Swift中的iOS项目设计一个带有阴影的圆形按钮。所以我想出了以下自定义按钮类:
import UIKit
@IBDesignable class MainButton: UIButton {
private var shadowLayer: CAShapeLayer!
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func layoutSubviews() {
super.layoutSubviews()
let image = createBackgroundImage()
setBackgroundImage(image,for: UIControl.State.normal)
clipsToBounds = true
contentEdgeInsets = UIEdgeInsets(top: 5,left: 20,bottom: 5,right: 20)
layer.masksToBounds = false
layer.shadowColor = UIColor.black.cgColor
layer.shadowOffset = CGSize(width: 0,height: 3)
layer.shadowOpacity = 0.2
layer.shadowRadius = 6
}
func createBackgroundImage() -> UIImage {
let rect = CGRect(x: 0,y: 0,width: frame.width,height: frame.height)
UIGraphicsBeginImageContextWithOptions(frame.size,false,0)
let color = UIColor.white
color.setFill()
UIBezierPath(roundedRect: rect,cornerRadius: frame.height * 0.5).addClip()
color.setFill()
UIRectFill(rect)
let image: UIImage = UIGraphicsGetimageFromCurrentimageContext()!
UIGraphicsEndImageContext()
return image
}
}
在我的情节提要中为按钮设置此类后,“ IBDEsignablesAgent-iOS”进程将占用我将近100%的cpu,Xcode会自动将其挂起。此行为使得几乎不可能正确调试问题。
我可以肯定我以错误的顺序或错误的方法做某事。但是我不知道如何解决。希望这里有人可以为我指明正确的方向。
谢谢, 詹斯
解决方法
我的自定义按钮带有一些阴影和圆角,我可以在情节提要中直接使用它,而无需以编程方式进行触摸。
class RoundedCornerButtonWithShadow: UIButton {
override func awakeFromNib() {
super.awakeFromNib()
self.layer.masksToBounds = false
self.layer.cornerRadius = self.frame.height/2
self.layer.shadowColor = UIColor.black.cgColor
self.layer.shadowPath = UIBezierPath(roundedRect: self.bounds,cornerRadius: self.layer.cornerRadius).cgPath
self.layer.shadowOffset = CGSize(width: 0.0,height: 3.0)
self.layer.shadowOpacity = 0.5
self.layer.shadowRadius = 1.0
}
}
,
只需检查视图的大小是否实际更改:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
def foo(arr,sub,fig,_str,vmin,vmax,ticks,fontsize,check,tick_check):
cm=plt.cm.jet
P2A=0.12; box_size=5
image=sub.matshow(arr,origin='low',cmap=cm,vmin=vmin,vmax=vmax,extent=[-10.92,10.92,-10.92,10.92],interpolation='bilinear')
sub.axis([-box_size,box_size,-box_size,box_size])
divider = make_axes_locatable(sub)
sub.set_title(_str,fontsize=fontsize); sub.set_xlabel(r"A",fontsize=fontsize); sub.set_ylabel(r"B",fontsize=fontsize)
if tick_check: cbar=fig.colorbar(image,cax=divider.append_axes("right",size="5%",pad=0.05),format='%.1E')
else: cbar=fig.colorbar(image,format='%.1f')
cbar.set_ticks(ticks); sub.xaxis.tick_bottom(); sub.tick_params(labelsize=10);sub.set_title(_str,y=1.01); plt.tight_layout(h_pad=1)
d_arr=np.random.rand(182,182)
fig0,(a1) = plt.subplots(ncols=1,figsize=(5,5))
im=foo(d_arr,a1,fig0,r'Test',np.min(d_arr),np.max(d_arr),np.arange(np.min(d_arr),0.1),10,False,True)
plt.savefig('Foo.eps',bbox_inches='tight',dpi=100)
创建阴影的速度很慢,x
每秒被调用数十次(基本上每帧一次)。