以下のコードを使用してビューの選択された角を丸くしましたが、レイヤーとしてサイズ変更可能なビューでこれを達成するのに問題がありますか?ビューがサイズ変更されるたびに更新されません。サイズ変更可能なビューの丸みのあるコーナー
extension UIView {
func roundCorners(corners:UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
}
}
titleLabelView.roundCorners(corners: [.topLeft, .topRight], radius: 10)
同様の質問hereが、そのかなり古いとすべてがにObjCで行わがあります。
サイズ変更可能なビューを迅速に選択したコーナーを丸める方法はありますか?
----- ----- EDIT
だから基本的に私が持っている私は、テキストのサイズに基づいてサイズを変更するように設定されているテキストテーブルです。
私はちょうど使用することができ、多くの場合:
myTextLabel.layer.cornerRadius = 10
しかし、これはすべての4つのコーナーを行います。だから、もし私がトップ2を丸くしたいのであれば、上記のエクステンションを使う必要があります。今私はviewDidLayoutSubViewsは動作しません使用して(私はcollectionViewの中心にセルのindexPathを取得する必要がありますので、私は、テキストラベルを設定することができます)ラベルの内容を設定する
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
GeneralFunctions.getIndexOfCell(sender: self) { (index) in
self.titleLabel.text = self.partArray[index].title
self.titleLabel.roundCorners(corners: [.topLeft, .topRight], radius: 10)
self.descriptionLabel.text = self.partArray[index].description
self.descriptionLabel.roundCorners(corners: [.bottomLeft, .bottomRight], radius: 10)
self.backgroundLabelView.layer.cornerRadius = 16
self.backgroundLabelView.layoutIfNeeded()
self.backgroundLabelView.layoutSubviews()
}
}
をscrollViewDidEndDeceleratingを使用していますので、この場合、加速終了とレイアウトの間には時間差があるためです。私はviewDidLayoutSubViews内側(中央インデックスのチェックせずに)同じコードを使用して試みたが、結果は同じです。
と私は角の丸みのいずれかを使用していないとき、ラベルが正しくサイズを変更しません。
リンク質問(と私は答えを期待)チェックせずに、あなたは正確に問題を説明することができますか? Obj-CからSwiftへの変換はかなり簡単です。何を試しましたか?あなたは疑問がむしろ曖昧です。特に – dfd
は、あなたが参照する質問に、viewDidLayoutSubviews' –