Пример #1
0
        public TweetImageFetchRequest(TweetImageInfo image, UIView view, bool placeholder)
        {
            var scale = UIScreen.MainScreen.Scale;

            tweetImage        = image;
            targetContentMode = view.ContentMode;
            targetDimensions  = TIPImageUtils.TIPDimensionsFromView(view);
            forcePlaceholder  = placeholder;

            if (forcePlaceholder)
            {
                imageUrl = new NSUrl("placeholder://placeholder.com/placeholder.jpg");
            }
            else
            {
                if (tweetImage.MediaUrl.StartsWith("https://pbs.twimg.com/media/", StringComparison.OrdinalIgnoreCase))
                {
                    var variantName = DetermineVariant(tweetImage.OriginalDimensions, targetDimensions, targetContentMode);
                    imageUrl = new NSUrl($"{tweetImage.MediaUrlWithoutExtension}?format={tweetImage.Format}&name={variantName}");
                }
                else
                {
                    imageUrl = new NSUrl(tweetImage.MediaUrl);
                }
            }
        }
Пример #2
0
        private string DetermineVariant(CGSize aspectRatio, CGSize dimensions, UIViewContentMode contentMode)
        {
            if (aspectRatio.Height <= 0 || aspectRatio.Width <= 0)
            {
                aspectRatio = new CGSize(1, 1);
            }

            var scaleToFit = (UIViewContentMode.ScaleAspectFit == contentMode);
            var scaledToTargetDimensions = TIPImageUtils.TIPDimensionsScaledToTargetSizing(aspectRatio, dimensions, (scaleToFit ? UIViewContentMode.ScaleAspectFit : UIViewContentMode.ScaleAspectFill));

            string selectedVariantName = null;

            foreach (var variant in variantSizeMap)
            {
                var variantSize = new CGSize(variant.Value, variant.Value);
                var scaledToVariantDimensions = TIPImageUtils.TIPDimensionsScaledToTargetSizing(aspectRatio, variantSize, UIViewContentMode.ScaleAspectFit);
                if (scaledToVariantDimensions.Width >= scaledToTargetDimensions.Width && scaledToVariantDimensions.Height >= scaledToTargetDimensions.Height)
                {
                    selectedVariantName = variant.Key;
                    break;
                }
            }

            if (string.IsNullOrEmpty(selectedVariantName))
            {
                selectedVariantName = variantSizeMap.Keys.LastOrDefault();
            }

            return(selectedVariantName);
        }
Пример #3
0
        public bool FetchHelperShouldContinueLoadingAfterFetching(TIPImageViewFetchHelper helper, ITIPImageFetchResult previewImageResult)
        {
            if (previewImageResult.ImageIsTreatedAsPlaceholder)
            {
                return(true);
            }

            var request = helper.FetchRequest;

            if (request.GetOptions().HasFlag(TIPImageFetchOptions.TreatAsPlaceholder))
            {
                // would be a downgrade, stop
                return(false);
            }

            var originalDimensions = previewImageResult.ImageOriginalDimensions;
            var viewDimensions     = TIPImageUtils.TIPDimensionsFromView(helper.FetchImageView);

            if (originalDimensions.Height >= viewDimensions.Height && originalDimensions.Width >= viewDimensions.Width)
            {
                return(false);
            }

            return(true);
        }