2016-08-01 18 views
0

「マッチ」画像とマッチ画像の右上にある「マッチ」ラベルのビューを作成しようとしています。これまでのすべてはうまく動作します。コンテナビューでイメージを作成し、私の価格ラベルのバックグラウンド用のUIImageViewを作成しますが、実際のラベルを作成してカスタマイズすると、永遠にアプリケーションにロードされます。マッチ画像、価格ラベルの背景画像はすべてロードされますが、実際のラベルは価格を詳述しません)。私のコードのどこに間違っているのか誰にでも気付くことができますか?UILabelはスピーディーな読み込みに時間がかかります

func setupMiniContentScroll(contentScroll: UIScrollView) { 
    let scalar:Double = 6/19 
    let contentViewDimension = contentScroll.frame.width * CGFloat(scalar) 
    let contentScrollWidth = CGFloat(LocalUser.matches.count) * (contentViewDimension + CGFloat(12)) - CGFloat(12) 
    contentScroll.backgroundColor = UIColorFromHex(0x34495e) 

    for index in 0..<LocalUser.matches.count { 
     let match = LocalUser.matches[index] 
     MatchesManager.globalManager.retrieveMatchThumbnail(match) { img, error in 

      if let img = img { 

       //create the mini matches views 
       let xOrigin = index == 0 ? 12 : CGFloat(index) * contentViewDimension + (CGFloat(12) * CGFloat(index) + CGFloat(12)) 
       let contentFrame = CGRectMake(xOrigin, 10, contentViewDimension, contentViewDimension) 
       let contentView = self.makeMiniContentView(contentFrame, image: img, matchedPrice: match.matchedPrice) 
       contentView.match = match 

       let tap = UITapGestureRecognizer(target: self, action: #selector(BrowseViewController.toggleItemInfo(_:))) 
       contentView.addGestureRecognizer(tap) 

       //update the contentScrollView 
       dispatch_async(dispatch_get_main_queue()) { 
        contentScroll.addSubview(contentView) 
        contentScroll.contentSize = CGSizeMake(contentScrollWidth + CGFloat(16), contentScroll.frame.height) 
       } 
      } 

     } 
    } 
} 


//functions to create labels and imgViews for MiniMyMatches 

func makeMiniContentView(frame: CGRect, image: UIImage, matchedPrice: Int) -> ItemContainer { 

    let containerView = ItemContainer(frame: frame) 

    //create the item image 
    let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: containerView.frame.width, height: containerView.frame.height)) 
    imgView.image = image 
    imgView.layer.cornerRadius = 5 
    imgView.layer.masksToBounds = true 
    imgView.userInteractionEnabled = true 

    //create the price label 
    dispatch_async(dispatch_get_main_queue()) { 
     let priceLabel = self.makeMiniPriceLabel(containerView, matchedPrice: matchedPrice) 
     containerView.addSubview(imgView) 
     containerView.addSubview(priceLabel) 
    } 
    return containerView 
} 

func makeMiniPriceLabel(containerView: ItemContainer, matchedPrice: Int) -> UIView { 
    //price label var 

    let priceLabelFrame = CGRectMake(containerView.frame.size.width - 35, -7, containerView.frame.size.width * 0.50, containerView.frame.size.height * 0.35) 

    //create the price container 
    let priceContainer = UIImageView(frame: priceLabelFrame) 
    priceContainer.image = UIImage(named: "venn.png") 

    //create the price label 
    let priceLabel = UILabel(frame: CGRect(x: 3, y:0, width: priceContainer.frame.width, height: priceContainer.frame.height)) 

    priceLabel.text = "$\(matchedPrice)" 
    priceLabel.numberOfLines = 1 
    priceLabel.textColor = UIColor.whiteColor() 
    priceLabel.font = priceLabel.font.fontWithSize(20) 
    priceContainer.addSubview(priceLabel) 
    return priceContainer 
} 

答えて

1

私の推測では、あなたのretrieveMatchThumbnail機能のための閉鎖がバックグラウンドスレッドで呼び出されていることです。 UIオブジェクトを操作しているクロージャー内にコードがあります。あなたの呼び出しの中で、すべてのUIコードをdispatch_async()に移動します。

MatchesManager.globalManager.retrieveMatchThumbnail(match) { img, error in 

     if let img = img { 

      //create the mini matches views 
      let xOrigin = index == 0 ? 12 : CGFloat(index) * contentViewDimension + (CGFloat(12) * CGFloat(index) + CGFloat(12)) 
      let contentFrame = CGRectMake(xOrigin, 10, contentViewDimension, contentViewDimension) 

      //update the contentScrollView 
      dispatch_async(dispatch_get_main_queue()) { 
       let contentView = self.makeMiniContentView(contentFrame, image: img, matchedPrice: match.matchedPrice) 
      contentView.match = match 

       let tap = UITapGestureRecognizer(target: self, action: #selector(BrowseViewController.toggleItemInfo(_:))) 
      contentView.addGestureRecognizer(tap) 

       contentScroll.addSubview(contentView) 
       contentScroll.contentSize = CGSizeMake(contentScrollWidth + CGFloat(16), contentScroll.frame.height) 
      } 
     } 

    } 
+0

良い推測ですが、残念ながらうまくいきませんでした。 –

関連する問題