26739


# 現状

Cellの生成の際に毎回AXRatingViewを呼び出し、  
レーティングを表示しているためなのか、  
上下にスクロールを繰り返しているとメモリ消費量が多くなり動作が重くなってしまいます。

# どうしたいのか

できるだけ上下させても動作を軽くしたいのですが、  
どのように書き換えればよろしいでしょうか、ご教授願います。

# Source

[code]

    import UIKit
    import AXRatingView
    
    class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
        func tableView(table: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 10
        }
    
        func tableView(table: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
            let cell = table.dequeueReusableCellWithIdentifier("TableCell", forIndexPath: indexPath)
    
            let label1 = cell.viewWithTag(1) as! UILabel
            label1.text = "あいうえお\nかきくけこ\nさしすせそ\nたちつてと"
            star(cell)
    
            return cell
        }
    
        func star(cell: UITableViewCell) {
    
            let usersRating: AXRatingView = AXRatingView(frame: CGRectZero)
            usersRating.translatesAutoresizingMaskIntoConstraints = false
            usersRating.value = 1.0
            usersRating.userInteractionEnabled = false
            usersRating.sizeToFit()
            cell.contentView.addSubview(usersRating)
    
        }
    
    }
    
[/code]


CC BY-SA 3.0
2016-06-14T07:11:57.037
26737
2016-06-14T07:45:52.557
16765
question
swift xcode swift2 xcode7
TableViewの軽量化


`AXRatingView`を毎回生成しているため、多重に表示されています。例えば`Tag`を設定するなどして、再利用すると良いかと思います。

[code]

    import UIKit
    import AXRatingView
    
    class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
        let kUserRatingViewTag: Int = 37564
    
        func tableView(table: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 10
        }
    
        func tableView(table: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
            let cell = table.dequeueReusableCellWithIdentifier("TableCell", forIndexPath: indexPath)
    
            let label1 = cell.viewWithTag(1) as! UILabel
            label1.text = "あいうえお\nかきくけこ\nさしすせそ\nたちつてと"
            if let usersRating = cell.contentView.viewWithTag(kUserRatingViewTag) as? AXRatingView {
                usersRating.value = 1.0;
            } else {
                star(cell)
            }
            return cell
        }
    
        func star(cell: UITableViewCell) {
    
            let usersRating: AXRatingView = AXRatingView(frame: CGRectZero)
            usersRating.translatesAutoresizingMaskIntoConstraints = false
            usersRating.value = 1.0
            usersRating.userInteractionEnabled = false
            usersRating.sizeToFit()
            usersRating.tag = kUserRatingViewTag
            cell.contentView.addSubview(usersRating)
        }
    }
    
[/code]

独自の`UITableViewCell`を作るのがより良いと思います。


CC BY-SA 3.0
2016-06-14T07:45:52.557
26739
2016-06-14T07:45:52.557
5337
26737
answer