2017-10-20 3 views
2

私はドーナツの図を実装しようとしていますが、タグが重なっていないようにしています。私はこれを避けるためのクリーンなソリューションに関するアイデアを探しています。UIViewがオーバーラップしないようにする

セグメントとタグ・クラスのような見える:図クラスの

class Segment { 
    var index: Double? 
    var tagText: String? 
} 

class SegmentTag: UIView { 
    @IBOutlet var iconView: UIImageView! 
    @IBOutlet var textLabel: UILabel! 

    init(text: String?, icon: UIImage?, frame: CGRect) { 
     ... 
    } 
} 

、セグメントおよびタグは、(引き分けに描かれている_ RECT :):

override func draw(_ rect: CGRect) { 
    for tag in tags { 
     tag.removeFromSuperview() 
    } 
    tags = [UIView]() 

    let tagSize = CGSize(width: 50, height: 60) 

    for segment in segments { 
     // ... Draw each segment 
     let radius = ... 
     let angle = ... 
     let tag = SegmentTag(text: segment.tagText, icon: tagIcon, frame: tagRect) 
     var tagPoint = CGPoint(x: radius * cos(angle), 
           y: radius * sin(angle)) 
     var tagRect = CGRect(origin: tagPoint, size: tagSize) 
     self.addSubview(tag) 
     tags.append(tag) 
    } 
} 

Colliding tags

あなたはどのように重複からビューを避けるために行きますか?

+0

私も同様の問題に直面していましたが、回線の長さを変えることで問題を軽減できます。しかし、大きな値の小さい値が一緒にクラスタ化されている場合でも、同じ問題が発生します。最終的に別のテーブルビューで凡例を実装する必要がありました。 – TheAppMentor

答えて

1

さまざまなSegmentTagオブジェクトのすべてのポイントを計算し、それらのオブジェクトをグループ化して表示することができます。

オブジェクトをグループ化した後に別の種類のタグ、GroupTagなどを表示することもできます。その中にはSegmentTagの数が含まれている可能性があります。タップしてポップオーバーリストを表示しますあなたのSegmentTagオブジェクト

もう1つの選択肢は、あなたのGroupTagを単純に見た目を変えて使用することですが、データを表示します。たとえば、画像は表示されず、代わりに値のリストが表示されます。

私の意見では、すべての可能なデータセットについて重複しない場所を実際に計算するよりも、これらの方がはるかに簡単で信頼性の高い解決策です。

関連する問題