2016-01-30 5 views
5

पर सहेजा गया मैं ऐप्पल टीवीओएस में टॉपशेल्फ़ को कार्यान्वित कर रहा हूं। मैंने छवियों को डाउनलोड किया है और छवि URLटीवीकंटेंट इटम्स को सौंपा गया है। डाउनलोड की गई छवि पहलू अनुपात TopShelf छवियों में ठीक से फिट नहीं है। मैंने छवि लिंक पर चौड़ाई + ऊंचाई जोड़कर आकार बदलने की कोशिश की है।ऐप्पलटीवी/टीवीओएस - TVContentItems में TopShelf छवियों का आकार बदलें ImageURL

www.mydownloadedimages.com/{width}x{height}

लेकिन यह काम नहीं किया।

क्या मैं किसी अन्य तरीके से क्लाइंट एंड पर आकार बदल सकता हूं। TVContentItem क्लास में मेरे पास केवल NSURL ऑब्जेक्ट है। कोई UIImage ऑब्जेक्ट नहीं है।

बहुत बहुत धन्यवाद।

यहाँ छवि आकार पर एप्पल के प्रलेखन और आकार

// ~ 2 : 3 
// ~ 1 : 1 
// ~ 4 : 3 
// ~ 16 : 9 
// ~ 8 : 3 
// ~ 87 : 28 


//@property imageShape 
//@abstract A TVContentItemImageShape value describing the intended aspect ratio or shape of the image. 
//@discussion For Top Shelf purposes: the subset of values which are //valid in this property, for TVContentItems in the topShelfItems property //of the TVTopShelfProvider, depends on the value of the topShelfStyle //property of the TVTopShelfProvider: 


        TVTopShelfContentStyleInset: 

         valid: TVContentItemImageShapeExtraWide 

        TVTopShelfContentStyleSectioned: 

         valid: TVContentItemImageShapePoster 

         valid: TVContentItemImageShapeSquare 

         valid: TVContentItemImageShapeHDTV 

जब इस संपत्ति के मूल्य शीर्ष शेल्फ शैली के लिए मान्य नहीं है, प्रणाली किसी भी तरह से छवि को मापना अधिकार सुरक्षित है।

उत्तर

4

आप सही कह रहे हैं कि TVContentItem में UIImage प्रकार की संपत्ति नहीं है। चूंकि TVContentItem भी imageURL संपत्ति में स्थानीय फ़ाइल यूआरएल स्वीकार करता है, एक समाधान हो सकता है:

  • इंटरनेट
  • से UIImage हथियाने शीर्ष शेल्फ छवि
  • में यह बचत के आकार के साथ एक नई छवि बनाने संदर्भ NSCacheDirectory
  • स्थानीय छवि URL को imageURL के रूप में सेट करना।

ये कदम उठाएँ:

  1. के हमारे TVContentItem वस्तु बनाएँ:

    let identifier = TVContentIdentifier(identifier: "myPicture", container: wrapperID)! 
    let contentItem = TVContentItem(contentIdentifier: identifier)! 
    
  2. सेट contentItem के imageShape:

    contentItem.imageShape = .HDTV 
    
  3. जी इंटरनेट से छवि रबड़ें। असल में मैं इस तुल्यकालिक किया, आप भी प्राप्त करने के लिए अन्य async तरीकों का उपयोग करने के लिए कोशिश कर सकते हैं कि (NSURLConnection, AFNetworking, आदि ...):

    let data : NSData = NSData(contentsOfURL: NSURL(string: "https://s3-ak.buzzfed.com/static/2014-07/16/9/enhanced/webdr08/edit-14118-1405517808-7.jpg")!)! 
    
  4. पथ जहाँ अपनी छवि को सहेज लिया जाएगा तैयार करने और अपने UIImage मिल data वस्तु से:

    let filename = "picture-test.jpg" 
    let paths = NSSearchPathForDirectoriesInDomains(.CachesDirectory, .UserDomainMask, true) 
    let filepath = paths.first! + "/" + filename 
    let img : UIImage = UIImage(data: data)! 
    
  5. मान लिया जाये कि आप पहले से ही topShelfStyle संपत्ति निर्धारित किया है, विधि TVTopShelfImageSizeForShape साथ शीर्ष शेल्फ छवि का आकार मिलता है।

    let shapeSize : CGSize = TVTopShelfImageSizeForShape(contentItem.imageShape, self.topShelfStyle) 
    
  6. shapeSize आकार की अपनी छवि संदर्भ बनाएँ और संदर्भ रेक्ट में डाउनलोड छवि आकर्षित: यह आपकी छवि संदर्भ के आकार होगा। यहां आप वांछित आकार में समायोजित करने के लिए छवि में अपने सभी संशोधन कर सकते हैं। इस उदाहरण में मैंने Instagram से एक स्क्वायर छवि ली और मैंने दाएं और बाएं किनारे पर सफेद लेटरबॉक्स बैंड लगाए।

    UIGraphicsBeginImageContext(shapeSize) 
    let imageShapeInRect : CGRect = CGRectMake((shapeSize.width-shapeSize.height)/2,0,shapeSize.height,shapeSize.height) 
    img.drawInRect(imageShapeInRect) 
    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    
  7. अंत में, अपने NSCacheDirectory में इस छवि को बचाने के लिए और के रूप में contentItem के imageURL छवि पथ सेट।

    UIImageJPEGRepresentation(newImage, 0.8)!.writeToFile(filepath, atomically: true) 
    contentItem.imageURL = NSURL(fileURLWithPath: filepath) 
    
  8. अन्य विवरण के साथ अपनी TVContentItem (शीर्षक, आंतरिक लिंक, आदि ...) की तरह पूरा करें, शीर्ष शेल्फ एक्सटेंशन चलाने ... एट देखा! tvOS Screenshot

+0

मैंने निकोला द्वारा सुझाए गए कुछ जैसा प्रयास किया। मैं समस्या में भाग गया, टॉपस्हेल्फ की प्रक्रिया तैयार करते समय टॉपशेल्फ़ प्रक्रिया मारे जाती है, जब बहुत अधिक समय लगता है। इसलिए मैंने छवियों के निर्माण को मेरे ऐप में स्थानांतरित कर दिया, क्योंकि छवियां अक्सर बदलती नहीं हैं। Topshelf से मैं फिर बनाई गई छवि फ़ाइलों को कम करता हूं। इसके लिए आवश्यक है कि टॉपशेल्फ़ छवियों को दिखाए जाने से पहले ऐप को शुरू करना होगा। एक और समस्या यह है कि टॉपशेल्फ़ छवियों को कैश किया जाता है। यहां तक ​​कि जब ऐप द्वारा छवियों को फिर से लिखा जाता है, तब भी टॉपशेल्फ़ में दिखाए गए चित्र अपडेट नहीं होते हैं। तो इसके साथ सावधान रहें। – ssb

0

मैं निकॉला Giancecchi के जवाब में जोड़ने के लिए चाहते हैं। 0

:

कार्यक्रम बाहर निकलने के कोड के साथ समाप्त हुआ: शीर्ष शेल्फ विस्तार एक गैर मुख्य थ्रेड तो UIImageJPEGRepresentation या UIImagePNGRepresentation तरह तरीकों का उपयोग कर कभी कभी शीर्ष शेल्फ धागा कंसोल में इस मुद्रण बंद हो जाएगा पर चलेगा इसे ठीक करने के लिए आप अपना कोड इस तरह लपेट सकते हैं:

DispatchQueue.main.sync { 
    UIImageJPEGRepresentation(newImage, 0.8)!.writeToFile(filepath, atomically: true) 

    let imageURL = NSURL(fileURLWithPath: filepath) 
    if #available(tvOSApplicationExtension 11.0, *) { 
     contentItem.setImageURL(imageURL, forTraits: .userInterfaceStyleLight) 
     contentItem.setImageURL(imageURL, forTraits: .userInterfaceStyleDark) 
    } else { 
     contentItem.imageURL = imageURL 
    } 
} 
संबंधित मुद्दे