我可以使用以下代码迅速创建三角形视图-
class TriangleView: UIView {
override func draw(_ rect: CGRect) {
// Get Height and Width
let layerHeight = layer.frame.height
let layerWidth = layer.frame.width
// Create Path
let bezierPath = UIBezierPath()
// Draw Points
bezierPath.move(to: CGPoint(x: 0, y: layerHeight))
bezierPath.addLine(to: CGPoint(x: layerWidth, y: layerHeight))
bezierPath.addLine(to: CGPoint(x: layerWidth / 2, y: 0))
bezierPath.addLine(to: CGPoint(x: 0, y: layerHeight))
bezierPath.close()
// Apply Color
UIColor.red.setFill()
bezierPath.fill()
// Mask to Path
let shapeLayer = CAShapeLayer()
shapeLayer.path = bezierPath.cgPath
layer.mask = shapeLayer
}
}
override func viewDidLoad() {
super.viewDidLoad()
let triangle = TriangleView(frame: CGRect(x: 0, y: 0, width: 55 , height: 60))
triangle.backgroundColor = .white
triangle.transform = CGAffineTransform(rotationAngle: .pi * 4.49)
imageView.addSubview(triangle)
}
现在的问题是我想使用变换属性将其更改为直角三角形。如何实现呢?
预期结果
当前结果
答案 0 :(得分:3)
这是代码。
override func draw(_ rect: CGRect) {
let path = UIBezierPath.init()
// top left
path.move(to: .zero)
// top right
path.addLine(to: CGPoint(x: bounds.size.width,
y: 0))
// bottom left offset
path.addLine(to: CGPoint(x: bounds.size.width * 0.1,
y: bounds.size.height))
// bottom left
path.addLine(to: CGPoint(x: 0,
y: bounds.size.height))
// top left
path.close()
// change fill color here.
UIColor.black.setFill()
path.fill()
}
我的绘画方式
修改
如果将代码UIColor.black.setFill()
更改为
let fillColor = UIColor(red: 0xF9/0xff, green: 0x0D/0xff, blue: 0x5A/0xff, alpha: 1)
fillColor.setFill()
编码有趣。
答案 1 :(得分:2)
您当前正在绘制“ a”。您想绘制'b'。
public static void copyDB(Context context) throws
IOException,FileNotFoundException{
String path = DBConstant.DATABASE_PATH + "/" + DBConstant.DATABASE_FILE;
File file = new File(path);
if (!file.exists()){
DBOpenHelper dbhelper = new DBOpenHelper(context, path ,1);
dbhelper.getWritableDatabase();
InputStream is = context.getAssets().open(DBConstant.DATABASE_FILE);
OutputStream os = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer))>0){
os.write(buffer, 0, length);
}
**os.flush();os.close();
is.close();**
}
}
然后使用:
extension UIBezierPath {
convenience init(rightAngledTriangleInRect: CGRect, offset withOffset: CGFloat) {
self.init()
move(to: CGPoint(x: rect.minX, y: rect.minY))
addLine(to: CGPoint(x: rect.maxX, y: rect.minY))
addLine(to: CGPoint(x: rect.minX + offset, y: rect.maxY))
addLine(to: CGPoint(x: rect.minX, y: rect.maxY))
addLine(to: CGPoint(x: rect.minX, y: rect.minY))
close()
}
}
请注意,不需要为贝塞尔曲线指令在方便的初始化中添加let path = UIBezierPath.init(rightAngledTriangleInRect: rect, withOffset: 20.0)
。
如果您要进行大量绘图,建议您添加一些这样的init,以使生活更轻松。
要在当前的TriangleView中使用:
self.
答案 2 :(得分:0)
也有一些简单的方法可以实现这一点,但是使用transform
时,这里是示例代码。使用此变换代替您的示例代码。它是从图形中获得直角三角形的示例代码:
triangle.transform = CGAffineTransform.identity.rotated(by: CGFloat.pi).translatedBy(x: (triangle.bounds.width / 2), y: 0.0)
您应该注意到CGAffineTransform
从其原点旋转视图