下のコードのとおり「画面をタッチしたら丸とその番号が表示されるアプリ」を作っています。
タッチして丸と番号を表示した後に、番号を変更する必要があり、ViewControllerから
class MyShapeLayerのCATextLayerのstringにアクセスして変更したいのですが、その方法が分かりません。
基本的なことかもしれませんが
どなたかご教授お願いします。
試したこと
MyShapeLayer.string
は下記のエラーが出ます
Type 'MyShapeLayer' has no member 'string'
class ViewController var selectLayer:CALayer! //最後にタッチされた座標をいれておく private var touchLastPoint:CGPoint! override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { selectLayer = nil let touch : UITouch = touches.first! let layer:CALayer = hitLayer(touch: touch) let touchPoint:CGPoint = touch.location(in: self.view) touchLastPoint=touchPoint self.selectLayerFunc(layer:layer) let oval = MyShapeLayer() oval.frame = CGRect(x:touchLastPoint.x-15,y:touchLastPoint.y-15,width:30,height:30) print("oval.position(oval.position)") oval.drawOval(lineWidth:1,textLayerNO:textLayerNO) textLayerNO += 1 name += 1 //丸に名前をつけてからaddする oval.name = String(name) self.view.layer.addSublayer(oval)//丸を追加 MyShapeLayer.string = "1" //←ココで変えたいが.stringプロパティがないです。 }
class MyShapeLayer: CALayer { func drawRect(lineWidth:CGFloat){ let rect = CAShapeLayer() rect.strokeColor = UIColor.black.cgColor rect.fillColor = UIColor.clear.cgColor rect.lineWidth = lineWidth rect.path = UIBezierPath(rect:CGRect(x:0,y:0,width:self.frame.width,height:self.frame.height)).cgPath self.addSublayer(rect) } var textLayerNO:Int = 1 //丸を描く関数 - CALayerの上に、そのCALayerのサイズと同じサイズのCAShapeLayerをのせています。 func drawOval(lineWidth:CGFloat,textLayerNO:Int){ let textLayer = CATextLayer() textLayer.string = String(textLayerNO) //←ココ textLayer.foregroundColor = UIColor.green.cgColor if textLayerNO > 99 { textLayer.fontSize = 13 textLayer.frame = CGRect(x:4,y:8,width:self.frame.width, height: self.frame.height) } else if textLayerNO > 9{ textLayer.fontSize = 20 textLayer.frame = CGRect(x:4,y:2.5,width:self.frame.width, height: self.frame.height) }else{ textLayer.fontSize = 20 textLayer.frame = CGRect(x:9,y:2.5,width:self.frame.width, height: self.frame.height) } self.addSublayer(textLayer) let ovalShapeLayer = CAShapeLayer() ovalShapeLayer.strokeColor = UIColor.green.cgColor ovalShapeLayer.fillColor = UIColor.clear.cgColor ovalShapeLayer.opacity = 1 //透過 ovalShapeLayer.lineWidth = lineWidth ovalShapeLayer.path = UIBezierPath(ovalIn: CGRect(x:0, y:0, width:self.frame.width, height: self.frame.height)).cgPath ovalShapeLayer.name = String(textLayerNO) self.addSublayer(ovalShapeLayer) } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/27 10:27