নতুন আইওএসের মিউজিক অ্যাপ্লিকেশনটিতে, আমরা এমন দৃশ্যের পিছনে একটি অ্যালবামের কভার দেখতে পাচ্ছি যা এটি ঝাপসা করে।
এরকম কিছু কীভাবে সম্পাদন করা যায়? আমি ডকুমেন্টেশন পড়েছি, কিন্তু সেখানে কিছুই পাইনি।
নতুন আইওএসের মিউজিক অ্যাপ্লিকেশনটিতে, আমরা এমন দৃশ্যের পিছনে একটি অ্যালবামের কভার দেখতে পাচ্ছি যা এটি ঝাপসা করে।
এরকম কিছু কীভাবে সম্পাদন করা যায়? আমি ডকুমেন্টেশন পড়েছি, কিন্তু সেখানে কিছুই পাইনি।
উত্তর:
আপনি UIVisualEffectView
এই প্রভাব অর্জন করতে ব্যবহার করতে পারেন । এটি একটি নেটিভ API যা পারফরম্যান্স এবং দুর্দান্ত ব্যাটারি লাইফের জন্য সূক্ষ্ম সুরে তৈরি করা হয়েছে, এবং এটি কার্যকর করা সহজ।
সুইফট:
//only apply the blur if the user hasn't disabled transparency effects
if !UIAccessibility.isReduceTransparencyEnabled {
view.backgroundColor = .clear
let blurEffect = UIBlurEffect(style: .dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
//always fill the view
blurEffectView.frame = self.view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView) //if you have more UIViews, use an insertSubview API to place it where needed
} else {
view.backgroundColor = .black
}
উদ্দেশ্য গ:
//only apply the blur if the user hasn't disabled transparency effects
if (!UIAccessibilityIsReduceTransparencyEnabled()) {
self.view.backgroundColor = [UIColor clearColor];
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
//always fill the view
blurEffectView.frame = self.view.bounds;
blurEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:blurEffectView]; //if you have more UIViews, use an insertSubview API to place it where needed
} else {
self.view.backgroundColor = [UIColor blackColor];
}
অন্তর্নিহিত বিষয়বস্তুটি ঝাপসা করার জন্য আপনি যদি এই ভিউ কন্ট্রোলারকে মডেলভাবে উপস্থাপন করছেন তবে আপনাকে অতিরিক্ত উপস্থাপনের শৈলীর ওভার কারেন্ট কনটেক্সট এ সেট করতে হবে এবং ব্যাকগ্রাউন্ড কালার সেট করতে হবে যাতে নিশ্চিত হয়ে যায় যে অন্তর্নিহিত ভিউ কন্ট্রোলার ওভারটপ উপস্থাপিত হওয়ার পরে এটি দৃশ্যমান থাকবে ensure
insertSubView:belowSubView:
এই view.insertSubview(blurEffectView, atIndex: 0)
UIAccessibilityIsReduceTransparencyEnabled()
।
যেহেতু স্ক্রিনশটের সেই চিত্রটি স্থিতিশীল, আপনি CIGaussianBlur
মূল চিত্র থেকে ব্যবহার করতে পারেন (আইওএস 6 প্রয়োজন)। এখানে নমুনা দেওয়া হয়েছে: https://github.com/evanwdavis/Fun-with-Masks/blob/master/Fun%20with%20Masks/EWDBlurExampleVC.m
মনে মনে, এটি এই পৃষ্ঠার অন্যান্য বিকল্পগুলির চেয়ে ধীর।
#import <QuartzCore/QuartzCore.h>
- (UIImage*) blur:(UIImage*)theImage
{
// ***********If you need re-orienting (e.g. trying to blur a photo taken from the device camera front facing camera in portrait mode)
// theImage = [self reOrientIfNeeded:theImage];
// create our blurred image
CIContext *context = [CIContext contextWithOptions:nil];
CIImage *inputImage = [CIImage imageWithCGImage:theImage.CGImage];
// setting up Gaussian Blur (we could use one of many filters offered by Core Image)
CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
[filter setValue:inputImage forKey:kCIInputImageKey];
[filter setValue:[NSNumber numberWithFloat:15.0f] forKey:@"inputRadius"];
CIImage *result = [filter valueForKey:kCIOutputImageKey];
// CIGaussianBlur has a tendency to shrink the image a little,
// this ensures it matches up exactly to the bounds of our original image
CGImageRef cgImage = [context createCGImage:result fromRect:[inputImage extent]];
UIImage *returnImage = [UIImage imageWithCGImage:cgImage];//create a UIImage for this function to "return" so that ARC can manage the memory of the blur... ARC can't manage CGImageRefs so we need to release it before this function "returns" and ends.
CGImageRelease(cgImage);//release CGImageRef because ARC doesn't manage this on its own.
return returnImage;
// *************** if you need scaling
// return [[self class] scaleIfNeeded:cgImage];
}
+(UIImage*) scaleIfNeeded:(CGImageRef)cgimg {
bool isRetina = [[[UIDevice currentDevice] systemVersion] intValue] >= 4 && [[UIScreen mainScreen] scale] == 2.0;
if (isRetina) {
return [UIImage imageWithCGImage:cgimg scale:2.0 orientation:UIImageOrientationUp];
} else {
return [UIImage imageWithCGImage:cgimg];
}
}
- (UIImage*) reOrientIfNeeded:(UIImage*)theImage{
if (theImage.imageOrientation != UIImageOrientationUp) {
CGAffineTransform reOrient = CGAffineTransformIdentity;
switch (theImage.imageOrientation) {
case UIImageOrientationDown:
case UIImageOrientationDownMirrored:
reOrient = CGAffineTransformTranslate(reOrient, theImage.size.width, theImage.size.height);
reOrient = CGAffineTransformRotate(reOrient, M_PI);
break;
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
reOrient = CGAffineTransformTranslate(reOrient, theImage.size.width, 0);
reOrient = CGAffineTransformRotate(reOrient, M_PI_2);
break;
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
reOrient = CGAffineTransformTranslate(reOrient, 0, theImage.size.height);
reOrient = CGAffineTransformRotate(reOrient, -M_PI_2);
break;
case UIImageOrientationUp:
case UIImageOrientationUpMirrored:
break;
}
switch (theImage.imageOrientation) {
case UIImageOrientationUpMirrored:
case UIImageOrientationDownMirrored:
reOrient = CGAffineTransformTranslate(reOrient, theImage.size.width, 0);
reOrient = CGAffineTransformScale(reOrient, -1, 1);
break;
case UIImageOrientationLeftMirrored:
case UIImageOrientationRightMirrored:
reOrient = CGAffineTransformTranslate(reOrient, theImage.size.height, 0);
reOrient = CGAffineTransformScale(reOrient, -1, 1);
break;
case UIImageOrientationUp:
case UIImageOrientationDown:
case UIImageOrientationLeft:
case UIImageOrientationRight:
break;
}
CGContextRef myContext = CGBitmapContextCreate(NULL, theImage.size.width, theImage.size.height, CGImageGetBitsPerComponent(theImage.CGImage), 0, CGImageGetColorSpace(theImage.CGImage), CGImageGetBitmapInfo(theImage.CGImage));
CGContextConcatCTM(myContext, reOrient);
switch (theImage.imageOrientation) {
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
CGContextDrawImage(myContext, CGRectMake(0,0,theImage.size.height,theImage.size.width), theImage.CGImage);
break;
default:
CGContextDrawImage(myContext, CGRectMake(0,0,theImage.size.width,theImage.size.height), theImage.CGImage);
break;
}
CGImageRef CGImg = CGBitmapContextCreateImage(myContext);
theImage = [UIImage imageWithCGImage:CGImg];
CGImageRelease(CGImg);
CGContextRelease(myContext);
}
return theImage;
}
ডাব্লুডাব্লুডিসি 2013 এর "আইওএসের সাথে প্রবৃদ্ধি UI প্রয়োগকারী" সেশনে অ্যাপল কীভাবে একটি অস্পষ্ট ব্যাকগ্রাউন্ড তৈরি করবেন তা ব্যাখ্যা করেছেন (14:30 এ) এবং applyLightEffect
অ্যাক্সিলারেট.ফ্রেমওয়ার্ক ব্যবহার করে নমুনা কোডে প্রয়োগ করা একটি পদ্ধতির উল্লেখ করেছেন ।
ডায়ামিক ব্লার্স তৈরি করতে জিপিইউআইমেজ ওপেনগিএল শেডার ব্যবহার করে। এটির বেশ কয়েকটি ধরণের অস্পষ্টতা রয়েছে: জিপিইউআইমেজবক্সব্লুরফিল্টার, জিপিইউআইমেজফাস্টব্লুরফিল্টার, গাউসিসিলেটিভ ব্লুর, জিপিইউআইমেজগাউসিয়ান ব্লুফিল্টার। এমনকী একটি জিপিইউআইজিবিওস ব্লুফিল্টার রয়েছে যা "আইওএস 7 এর নিয়ন্ত্রণ প্যানেল দ্বারা সরবরাহিত অস্পষ্টতার প্রভাবটিকে সম্পূর্ণরূপে প্রতিলিপি করা উচিত" ( টুইট , নিবন্ধ )। নিবন্ধটি বিস্তারিত এবং তথ্যবহুল।
- (ইউআইআইএমেজ *) অস্পষ্ট জিপিউইউইউবিউশন: (ইউআইআইমেজ *) ব্লু ল্যাভিলের সাথে চিত্র: (এনএসআইঞ্জার) অস্পষ্ট { জিপিইউআইমেজফাস্টবলুর ফিল্টার * ব্লারফিল্টার = [জিপিইউআইমেজফাস্টব্লারফিল্টার নতুন]; blurFilter.blurSize = blur; UII छवि * ফলাফল = [blurFilter চিত্রবাইফিলারিং ইমেজ: চিত্র]; প্রত্যাবর্তনের ফলাফল; }
Indieambitions.com থেকে: ভিউমেজ ব্যবহার করে অস্পষ্টতা সম্পাদন করুন । আলগোরিদিমটি আইওএস-রিয়েলটাইমব্লুরে ব্যবহৃত হয় ।
নিক লকউড থেকে: https://github.com/nicklockwood/FXBlurView উদাহরণটি একটি স্ক্রোল ভিউয়ের উপর অস্পষ্টতা দেখায়। এটি ডিসপ্যাচ_সে্যান্সের সাথে ঝাপসা হয়ে যায়, তারপরে ইউআইটি ট্র্যাকিংআরলুপমোডের সাথে আপডেটগুলি কল করতে সিঙ্ক করে যাতে ইউআইকিট ইউআইএসক্রোলভিউয়ের স্ক্রোলকে বেশি অগ্রাধিকার দেয় তখন এই ব্লারটি পিছনে থাকে না। এটি নিকের আইওএস কোর অ্যানিমেশন বইটিতে ব্যাখ্যা করা হয়েছে , এটি বিটিডব্লিউটি দুর্দান্ত।
আইওএস-ব্লার এটি ইউআইটিুলবারের ঝাপসা লেয়ার নেয় এবং এটিকে অন্য কোথাও রাখে। আপনি যদি এই পদ্ধতিটি ব্যবহার করেন তবে অ্যাপল আপনার অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করবে। Https://github.com/mochidev/MDBlurView/issues/4 দেখুন
ইভাদনে ব্লগ থেকে: লাইভফ্রস্ট: দ্রুত, সিঙ্ক্রোনাস ইউআইভিউ স্ন্যাপশট কনভলভিং । দুর্দান্ত কোড এবং দুর্দান্ত পড়া। এই পোস্ট থেকে কিছু ধারণা:
অ্যান্ডি মাতুশাক টুইটারে বলেছিলেন : "আপনি জানেন যে অনেক জায়গাগুলি দেখে মনে হচ্ছে যে আমরা আসল সময়ে এটি করছি, এটি চালাক কৌশল দ্বারা স্থির।"
এ doubleencore.com তারা বলে "আমরা যে 10 পর্তুগীজ ভাষায় দাগ ব্যাসার্ধ প্লাস বেশিরভাগ পরিস্থিতিতে সম্পৃক্তি 10 পর্তুগীজ ভাষায় বৃদ্ধি সেরা নকল আইওএস 7 এর ব্লার ইফেক্ট পাওয়া করেছি"।
অ্যাপলের এসবিএফ প্রসেসিউডালওয়াল্প্পপারভিউয়ের ব্যক্তিগত শিরোনামগুলিতে উঁকি দেওয়া ।
শেষ অবধি, এটি সত্যই অস্পষ্ট নয়, তবে মনে রাখবেন আপনি পিক্সেলটেড চিত্র পেতে রাস্টারাইজেশনস্কেল সেট করতে পারেন: http://www.dimzzy.com/blog/2010/11/blur-effect-for-uiview/
UIImage
অন্যথায় ফেরত দেওয়ার সময় এটি একটি রেটিনা ডিভাইসে খুব বড় দেখায় ...
আমি ঠিক এই প্রশ্নের আরও বিকল্প প্রদানের জন্য গ্রহণযোগ্য উত্তর থেকে একটি লিখিত উদ্দেশ্য-সি সংস্করণ পোস্ট করার সিদ্ধান্ত নিয়েছি ..
- (UIView *)applyBlurToView:(UIView *)view withEffectStyle:(UIBlurEffectStyle)style andConstraints:(BOOL)addConstraints
{
//only apply the blur if the user hasn't disabled transparency effects
if(!UIAccessibilityIsReduceTransparencyEnabled())
{
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:style];
UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
blurEffectView.frame = view.bounds;
[view addSubview:blurEffectView];
if(addConstraints)
{
//add auto layout constraints so that the blur fills the screen upon rotating device
[blurEffectView setTranslatesAutoresizingMaskIntoConstraints:NO];
[view addConstraint:[NSLayoutConstraint constraintWithItem:blurEffectView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:view
attribute:NSLayoutAttributeTop
multiplier:1
constant:0]];
[view addConstraint:[NSLayoutConstraint constraintWithItem:blurEffectView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:view
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0]];
[view addConstraint:[NSLayoutConstraint constraintWithItem:blurEffectView
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:view
attribute:NSLayoutAttributeLeading
multiplier:1
constant:0]];
[view addConstraint:[NSLayoutConstraint constraintWithItem:blurEffectView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:view
attribute:NSLayoutAttributeTrailing
multiplier:1
constant:0]];
}
}
else
{
view.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7];
}
return view;
}
আপনি যদি কেবল প্রতিকৃতি মোড সমর্থন করেন বা আমি কেবল এই ফাংশনটিতে একটি পতাকা যুক্ত করতে সেগুলি ব্যবহার করতে চাইছি বা না চাইলে সীমাবদ্ধতাগুলি সরিয়ে দেওয়া যেতে পারে ..
আমি মনে করি না যে আমাকে কোড পোস্ট করার অনুমতি দেওয়া হয়েছে তবে ডাব্লুডাব্লুডিসি নমুনা কোড উল্লেখ করে উপরের পোস্টটি সঠিক। লিঙ্কটি এখানে: https://developer.apple.com/downloads/index.action?name=WWDC%202013
আপনি যে ফাইলটি সন্ধান করছেন সেটি হ'ল ইউআইআইমেজে বিভাগ এবং এই পদ্ধতিটি হ'ল লাইটএফেক্ট।
আমি উপরে একটি মন্তব্যে উল্লেখ করেছি যে, অ্যাপল ব্লারটির সম্পৃক্ততা রয়েছে এবং অস্পষ্টতা ছাড়াও অন্যান্য জিনিস চলছে। একটি সাধারণ অস্পষ্টতা কাজ করবে না ... আপনি যদি তাদের স্টাইল অনুকরণের জন্য সন্ধান করছেন।
আমি মনে করি এর সহজ সমাধান হ'ল ইউআইটিউলবারকে ওভাররাইড করা, যা আইওএস-এর পিছনে সমস্ত কিছু ঝাপসা করে It's
আপনি এটি যে কোনও দৃষ্টিতে করতে পারেন, কেবল এটির UIToolbar
পরিবর্তে একটি সাবক্লাস করুন UIView
। এমনকি আপনি এটি কোনও সম্পত্তি UIViewController
হিসাবেও করতে পারেন view
, উদাহরণস্বরূপ ...
1) একটি নতুন ক্লাস তৈরি করুন যা "সাবক্লাস অফ" UIViewController
এবং "ইউজার ইন্টারফেসের সাথে XIB সহ" জন্য বক্সটি চেক করুন।
2) ভিউটি নির্বাচন করুন এবং ডান হাতের প্যানেলে পরিচয় পরিদর্শকের কাছে যান (Alt-আদেশ -3)। "ক্লাস" এ পরিবর্তন করুনUIToolbar
। এখন অ্যাট্রিবিউটস ইন্সপেক্টর (Alt-কমান্ড -4) এ যান এবং "ব্যাকগ্রাউন্ড" রঙটি "সাফ রঙে" পরিবর্তন করুন।
3) মূল দৃশ্যে একটি সংক্ষিপ্তসার যুক্ত করুন এবং এটি আপনার ইন্টারফেসের একটি আইবিআউটলেট পর্যন্ত লাগান। ফোন করুন backgroundColorView
। এটি বাস্তবায়ন ( .m
) ফাইলের একটি ব্যক্তিগত বিভাগ হিসাবে, এর মতো দেখতে পাবেন ।
@interface BlurExampleViewController ()
@property (weak, nonatomic) IBOutlet UIView *backgroundColorView;
@end
4) দেখুন নিয়ামক বাস্তবায়ন ( .m
) ফাইল যান এবং -viewDidLoad
পদ্ধতিটি পরিবর্তন করুন , নীচের মত দেখতে:
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.barStyle = UIBarStyleBlack; // this will give a black blur as in the original post
self.backgroundColorView.opaque = NO;
self.backgroundColorView.alpha = 0.5;
self.backgroundColorView.backgroundColor = [UIColor colorWithWhite:0.3 alpha:1];
}
এটি আপনাকে একটি গা dark় ধূসর দর্শন দেবে যা এর পিছনে সমস্ত কিছুই ঝাপসা করে। ওএস / এসডিকে প্রদত্ত আপনার নখদর্পণে থাকা সমস্ত কিছু ব্যবহার করে কোনও মজাদার ব্যবসা নয়, কোনও ধীর গতির চিত্র অস্পষ্ট নয়।
আপনি এই ভিউ নিয়ন্ত্রকের দর্শনটিকে অন্য দৃশ্যে যুক্ত করতে পারেন:
[self addChildViewController:self.blurViewController];
[self.view addSubview:self.blurViewController.view];
[self.blurViewController didMoveToParentViewController:self];
// animate the self.blurViewController into view
কিছু অস্পষ্ট থাকলে আমাকে জানান, আমি সাহায্য করতে পেরে খুশি হব!
রঙিন অস্পষ্টতা ব্যবহার করার সময় ইউআইটিউলবার 7.0.3-এ পরিবর্তিত করা হয়েছে poss
আমরা রঙটি ব্যবহার করে সেট করতে সক্ষম হতাম barTintColor
, তবে আপনি যদি এটি আগে করছিলেন তবে আপনাকে আলফা উপাদানটি 1 টিরও কম সেট করতে হবে অন্যথায় আপনার ইউআইটিলবার সম্পূর্ণরূপে অস্বচ্ছ বর্ণযুক্ত হবে no কোনও ঝাপসা নেই।
এটি নিম্নলিখিত হিসাবে অর্জন করা যেতে পারে: (মনে self
রাখা একটি subclass হয় UIToolbar
)
UIColor *color = [UIColor blueColor]; // for example
self.barTintColor = [color colorWithAlphaComponent:0.5];
এটি অস্পষ্ট দর্শনকে একটি নীল-ইশ রঙ দেবে।
self.backgroundColorView.opaque = NO;
self.backgroundColorView.alpha = 0.5;
self.backgroundColorView.backgroundColor = [UIColor colorWithWhite:0.3 alpha:1];
তবে পটভূমিটি অস্পষ্ট করা হয়নি, কেবল একটি দুর্দান্ত ওভার এফেক্ট তৈরি করুন। যাইহোক আপনাকে ধন্যবাদ!
সিআইজিউশিয়ান ব্লুর ব্যবহার করে সুইফটে একটি দ্রুত বাস্তবায়ন এখানে দেওয়া হয়েছে:
func blur(image image: UIImage) -> UIImage {
let radius: CGFloat = 20;
let context = CIContext(options: nil);
let inputImage = CIImage(CGImage: image.CGImage!);
let filter = CIFilter(name: "CIGaussianBlur");
filter?.setValue(inputImage, forKey: kCIInputImageKey);
filter?.setValue("\(radius)", forKey:kCIInputRadiusKey);
let result = filter?.valueForKey(kCIOutputImageKey) as! CIImage;
let rect = CGRectMake(radius * 2, radius * 2, image.size.width - radius * 4, image.size.height - radius * 4)
let cgImage = context.createCGImage(result, fromRect: rect);
let returnImage = UIImage(CGImage: cgImage);
return returnImage;
}
আপনি UIVisualEffectView
কাস্টম সেটিং এর সাথে চেষ্টা করে দেখতে পারেন -
class BlurViewController: UIViewController {
private let blurEffect = (NSClassFromString("_UICustomBlurEffect") as! UIBlurEffect.Type).init()
override func viewDidLoad() {
super.viewDidLoad()
let blurView = UIVisualEffectView(frame: UIScreen.main.bounds)
blurEffect.setValue(1, forKeyPath: "blurRadius")
blurView.effect = blurEffect
view.addSubview(blurView)
}
}
আউটপুট: - জন্য blurEffect.setValue(1...
& blurEffect.setValue(2..
(NSClassFromString("_UICustomVibrancyEffect") as! UIVibrancyEffect.Type).init()
সত্যিই কিছু সাহায্যের প্রশংসা করব!
ইউআইভিউপ্রোপার্টি অ্যানিম্যাটর ব্যবহার করে ব্যক্তিগত এপিআই দিয়ে হ্যাগলিং ছাড়াই কাস্টম ব্লার যুক্ত করার সহজ উপায় :
প্রথমে শ্রেণীর সম্পত্তি ঘোষণা করুন:
var blurAnimator: UIViewPropertyAnimator!
তারপরে আপনার অস্পষ্ট দৃশ্যটি এতে সেট করুন viewDidLoad()
:
let blurEffectView = UIVisualEffectView()
blurEffectView.backgroundColor = .clear
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView)
blurAnimator = UIViewPropertyAnimator(duration: 1, curve: .linear) { [blurEffectView] in
blurEffectView.effect = UIBlurEffect(style: .light)
}
blurAnimator.fractionComplete = 0.15 // set the blur intensity.
দ্রষ্টব্য: এই দ্রবণটি UICollectionView
/ UITableView
কোষগুলির জন্য উপযুক্ত নয়
এক্সকোড থেকে আপনি এটি সহজেই করতে পারেন। এক্সকোড থেকে পদক্ষেপগুলি অনুসরণ করুন। আপনার ইউভিউ বা চিত্র দর্শনে ড্রেজ ভিজ্যুয়াল এফেক্ট ভিউ।
শুভ কোডিং :)
গৃহীত উত্তরটি সঠিক তবে এখানে একটি গুরুত্বপূর্ণ পদক্ষেপ অনুপস্থিত রয়েছে, যদি এই দৃষ্টিভঙ্গি - যার জন্য আপনি অস্পষ্ট ব্যাকগ্রাউন্ড চান - ব্যবহার করে উপস্থাপন করা হয়েছে
[self presentViewController:vc animated:YES completion:nil]
ডিফল্টরূপে, এটি অস্পষ্টতাটিকে অস্বীকার করবে কারণ ইউআইকিট উপস্থাপকের দৃষ্টিভঙ্গি সরিয়ে দেয়, যা আপনি আসলে ঝাপসা করছেন। সেই অপসারণটি এড়াতে, পূর্ববর্তীটির আগে এই লাইনটি যুক্ত করুন
vc.modalPresentationStyle = UIModalPresentationOverFullScreen;
বা অন্যান্য Over
শৈলী ব্যবহার করুন ।
উদ্দেশ্য গ
UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = self.accessImageView.bounds;
[self.accessImageView addSubview:visualEffectView];
SWIFT 3.0
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView)
যে সমস্ত লোকেরা আরও নিয়ন্ত্রণ চায় তাদের জন্য আপনি অ্যাপলের UIImageEffects
নমুনা কোডটি ব্যবহার করতে পারেন ।
আপনি UIImageEffects
অ্যাপলের বিকাশকারী লাইব্রেরি থেকে কোডটি অনুলিপি করতে পারেন : অস্পষ্ট এবং একটি চিত্র টিংটিং
#import "UIImageEffects.h"
...
self.originalImageView.image = [UIImageEffects imageByApplyingLightEffectToImage:[UIImage imageNamed:@"yourImage.png"]];
func blurBackgroundUsingImage(image: UIImage)
{
var frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)
var imageView = UIImageView(frame: frame)
imageView.image = image
imageView.contentMode = .ScaleAspectFill
var blurEffect = UIBlurEffect(style: .Light)
var blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = frame
var transparentWhiteView = UIView(frame: frame)
transparentWhiteView.backgroundColor = UIColor(white: 1.0, alpha: 0.30)
var viewsArray = [imageView, blurEffectView, transparentWhiteView]
for index in 0..<viewsArray.count {
if let oldView = self.view.viewWithTag(index + 1) {
var oldView = self.view.viewWithTag(index + 1)
// Must explicitly unwrap oldView to access its removeFromSuperview() method as of Xcode 6 Beta 5
oldView!.removeFromSuperview()
}
var viewToInsert = viewsArray[index]
self.view.insertSubview(viewToInsert, atIndex: index + 1)
viewToInsert.tag = index + 1
}
}
এটি দুর্ঘটনাক্রমে পাওয়া গেছে, আমাকে সত্যিই দুর্দান্ত (অ্যাপলের ডুপ্লিকেটের কাছাকাছি) ফলাফল দেয় এবং এক্সিলারেশন ফ্রেমওয়ার্ক ব্যবহার করে। - http://pastebin.com/6cs6hsyQ * আমার লেখা নয়
এই উত্তরটি মিতজা সেমলিকের পূর্ববর্তী উত্তরের উপর ভিত্তি করে । আমি এটিকে সুইফট 3 এ রূপান্তর করেছি, কমেেন্টগুলিতে কী ঘটছে তার একটি ব্যাখ্যা যুক্ত করেছি, এটি একটি ইউআইভিউউকন্ট্রোলারের বর্ধিত করেছি যাতে যে কোনও ভিসি ইচ্ছামত কল করতে পারে, নির্বাচনী অ্যাপ্লিকেশনটি দেখানোর জন্য একটি অস্পষ্ট দৃষ্টিভঙ্গি যুক্ত করেছে এবং একটি সমাপ্তি ব্লক যুক্ত করেছে কলিং ভিউ কন্ট্রোলার অস্পষ্টতা সম্পূর্ণ হওয়ার পরে যা খুশি করতে পারে।
import UIKit
//This extension implements a blur to the entire screen, puts up a HUD and then waits and dismisses the view.
extension UIViewController {
func blurAndShowHUD(duration: Double, message: String, completion: @escaping () -> Void) { //with completion block
//1. Create the blur effect & the view it will occupy
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light)
let blurEffectView = UIVisualEffectView()//(effect: blurEffect)
blurEffectView.frame = self.view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
//2. Add the effect view to the main view
self.view.addSubview(blurEffectView)
//3. Create the hud and add it to the main view
let hud = HudView.getHUD(view: self.view, withMessage: message)
self.view.addSubview(hud)
//4. Begin applying the blur effect to the effect view
UIView.animate(withDuration: 0.01, animations: {
blurEffectView.effect = blurEffect
})
//5. Halt the blur effects application to achieve the desired blur radius
self.view.pauseAnimationsInThisView(delay: 0.004)
//6. Remove the view (& the HUD) after the completion of the duration
DispatchQueue.main.asyncAfter(deadline: .now() + duration) {
blurEffectView.removeFromSuperview()
hud.removeFromSuperview()
self.view.resumeAnimationsInThisView()
completion()
}
}
}
extension UIView {
public func pauseAnimationsInThisView(delay: Double) {
let time = delay + CFAbsoluteTimeGetCurrent()
let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, time, 0, 0, 0, { timer in
let layer = self.layer
let pausedTime = layer.convertTime(CACurrentMediaTime(), from: nil)
layer.speed = 0.0
layer.timeOffset = pausedTime
})
CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, CFRunLoopMode.commonModes)
}
public func resumeAnimationsInThisView() {
let pausedTime = layer.timeOffset
layer.speed = 1.0
layer.timeOffset = 0.0
layer.beginTime = layer.convertTime(CACurrentMediaTime(), from: nil) - pausedTime
}
}
আমি নিশ্চিত করেছি যে এটি আইওএস 10.3.1 এবং আইওএস 11 উভয়ই কাজ করে
@ জোয়ের উত্তরের একটি গুরুত্বপূর্ণ পরিপূরক
এটি একটি অবস্থা যেখানে আপনি একটি ঝাপসা-পটভূমি উপস্থাপন করতে চান ক্ষেত্রে প্রযোজ্য UIViewController
সঙ্গে UINavigationController
।
// suppose you've done blur effect with your presented view controller
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController];
// this is very important, if you don't do this, the blur effect will darken after view did appeared
// the reason is that you actually present navigation controller, not presented controller
// please note it's "OverFullScreen", not "OverCurrentContext"
nav.modalPresentationStyle = UIModalPresentationOverFullScreen;
UIViewController *presentedViewController = [[UIViewController alloc] init];
// the presented view controller's modalPresentationStyle is "OverCurrentContext"
presentedViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
[presentingViewController presentViewController:nav animated:YES completion:nil];
উপভোগ করুন!
অস্পষ্ট চিত্র ফিরিয়ে দেওয়ার জন্য কেভের উত্তরের সুইফ্ট 3 সংস্করণ -
func blurBgImage(image: UIImage) -> UIImage? {
let radius: CGFloat = 20;
let context = CIContext(options: nil);
let inputImage = CIImage(cgImage: image.cgImage!);
let filter = CIFilter(name: "CIGaussianBlur");
filter?.setValue(inputImage, forKey: kCIInputImageKey);
filter?.setValue("\(radius)", forKey:kCIInputRadiusKey);
if let result = filter?.value(forKey: kCIOutputImageKey) as? CIImage{
let rect = CGRect(origin: CGPoint(x: radius * 2,y :radius * 2), size: CGSize(width: image.size.width - radius * 4, height: image.size.height - radius * 4))
if let cgImage = context.createCGImage(result, from: rect){
return UIImage(cgImage: cgImage);
}
}
return nil;
}
আশ্চর্যজনক @ অ্যাডামবার্ডন কৌশলটি ব্যবহার করে এখানে একটি পূর্ণ উদাহরণ।
@IBDesignable class ButtonOrSomethingWithBlur: UIButton {
var ba: UIViewPropertyAnimator?
private lazy var blurry: BlurryBall = { return BlurryBall() }()
override func didMoveToSuperview() {
super.didMoveToSuperview()
// Setup the blurry ball. BE SURE TO TEARDOWN.
// Use superb trick to access the internal guassian level of Apple's
// standard gpu blurrer per stackoverflow.com/a/55378168/294884
superview?.insertSubview(blurry, belowSubview: self)
ba = UIViewPropertyAnimator(duration:1, curve:.linear) {[weak self] in
// note, those duration/curve values are simply unusued
self?.blurry.effect = UIBlurEffect(style: .extraLight)
}
ba?.fractionComplete = live.largeplaybutton_blurfactor
}
override func willMove(toSuperview newSuperview: UIView?) {
// Teardown for the blurry ball - critical
if newSuperview == nil { print("safe teardown")
ba?.stopAnimation(true)
ba?.finishAnimation(at: .current)
}
}
override func layoutSubviews() { super.layoutSubviews()
blurry.frame = bounds, your drawing frame or whatever
}
{পাশাপাশি: একটি সাধারণ আইওএস ইঞ্জিনিয়ারিং বিষয় হিসাবে didMoveToWindow
আপনার চেয়ে বেশি উপযুক্ত হতে পারেdidMoveToSuperview
। দ্বিতীয়ত, আপনি টিয়ারডাউনটি করার জন্য অন্য কোনও উপায় ব্যবহার করতে পারেন তবে টিয়ারডাউনটি সেখানে দেখানো দুটি লাইনের কোড is
BlurryBall
শুধু একটি UIVisualEffectView
। ভিজ্যুয়াল এফেক্ট ভিউয়ের জন্য ইনিটগুলি লক্ষ্য করুন। আপনার যদি গোলাকার কোণগুলি বা যা কিছু প্রয়োজন হয় তবে এই শ্রেণিতে এটি করুন।
class BlurryBall: UIVisualEffectView {
override init(effect: UIVisualEffect?) { super.init(effect: effect)
commonInit() }
required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder)
commonInit() }
private func commonInit() {
clipsToBounds = true
backgroundColor = .clear
}
override func layoutSubviews() {
super.layoutSubviews()
layer.cornerRadius = bounds.width / 2
}
}
অ্যাপল ইউআইআইমেজ + ইমেজএফেক্টস নামে পরিচিত ইউআইআইমেজ ক্লাসের জন্য একটি এক্সটেনশন সরবরাহ করেছে। এই শ্রেণীতে আপনার দৃষ্টি ঝাপসা করার জন্য আপনার পছন্দসই পদ্ধতি রয়েছে
গৃহীত উত্তরের জন্য সরবরাহ করা সমাধানের জন্য এখানে সুইফট ২.০ কোডটি রয়েছে :
//only apply the blur if the user hasn't disabled transparency effects
if !UIAccessibilityIsReduceTransparencyEnabled() {
self.view.backgroundColor = UIColor.clearColor()
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
//always fill the view
blurEffectView.frame = self.view.bounds
blurEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
self.view.addSubview(blurEffectView) //if you have more UIViews, use an insertSubview API to place it where needed
} else {
self.view.backgroundColor = UIColor.blackColor()
}
যদি টেবিলভিউয়ের জন্য একটি গা dark় অস্পষ্ট দর্শন যোগ করা হয় তবে এটি এটি সুন্দর করে তোলে:
tableView.backgroundColor = .clear
let blurEffect = UIBlurEffect(style: .dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = tableView.bounds
blurEffectView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
// Assigning blurEffectView to backgroundView instead of addSubview to tableView makes tableView cell not blocked by blurEffectView
tableView.backgroundView = blurEffectView
"ব্লার সাথে ভিজ্যুয়াল এফেক্ট ভিউ" এবং "ব্লার এবং ভাইব্রান্সির সাথে ভিজ্যুয়াল এফেক্ট ভিউ" ব্যবহার করে আপনি সরাসরি আপনার ব্যাকগ্রাউন্ড ব্লার করতে পারেন।
আইওএস অ্যাপ্লিকেশনে ব্লার ব্যাকগ্রাউন্ড তৈরির জন্য আপনাকে যা করতে হবে তা হ'ল ...
অ্যাপ্লিকেশন বিন্যাস যে কোনও বোতামে ক্লিক করার আগে!
বোতামটি ক্লিক করার পরে অ্যাপ্লিকেশন ভিউ যা পুরো অ্যাপ্লিকেশনটির পটভূমি ঝাপসা করে তোলে!
যদি এটি যে কাউকে সহায়তা করে তবে জর্ডান এইচ এর উত্তরের ভিত্তিতে আমি তৈরি একটি সুইফট এক্সটেনশন এটি সুইফট 5 এ লেখা হয়েছে এবং এটি উদ্দেশ্য সি থেকে ব্যবহার করা যেতে পারে here
extension UIView {
@objc func blurBackground(style: UIBlurEffect.Style, fallbackColor: UIColor) {
if !UIAccessibility.isReduceTransparencyEnabled {
self.backgroundColor = .clear
let blurEffect = UIBlurEffect(style: style)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
//always fill the view
blurEffectView.frame = self.self.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.insertSubview(blurEffectView, at: 0)
} else {
self.backgroundColor = fallbackColor
}
}
}
দ্রষ্টব্য: আপনি যদি কোনও পাঠ্যকে প্রভাবিত না করে কোনও ইউআইএলবেলের পটভূমিটি অস্পষ্ট করতে চান তবে আপনার একটি কন্টেইনার ইউআইভিউউ তৈরি করা উচিত, ইউআইইউবেলটিকে কনটেইনারটিতে ইউআইভিউউকে একটি সংক্ষিপ্তসার হিসাবে যুক্ত করা উচিত, ইউআইআইএলএল এর ব্যাকগ্রাউন্ড কালারটি ইউআইসিএলআর। : UIBlurEffect.Style, ফ্যালব্যাক কালার: UIColor) কনটেইনার ইউআইভিউতে। সুইফট 5 এ লিখিত এর একটি দ্রুত উদাহরণ এখানে:
let frame = CGRect(x: 50, y: 200, width: 200, height: 50)
let containerView = UIView(frame: frame)
let label = UILabel(frame: frame)
label.text = "Some Text"
label.backgroundColor = UIColor.clear
containerView.addSubview(label)
containerView.blurBackground(style: .dark, fallbackColor: UIColor.black)
সুইফট 4:
ওভারলে বা পপআপ ভিউ যুক্ত করতে আপনি যে ধারক পাতায় একটি নিখরচায় নিয়ন্ত্রণ কন্ট্রোলার পান সেটিকেও ব্যবহার করতে পারেন (আপনি সাধারণ প্যালেট / লাইব্রেরি থেকে ধারক দেখুন পান)
পদক্ষেপ:
কনটেইনার ভিউয়ের বিষয়বস্তু প্রদর্শিত হবে তখন এটিকে হালকা করার জন্য একটি ভিউ (ছবিতে ভিউফোর্ডকন্টেনার) রাখুন যা এই ধারক ভিউটি ধারণ করে। প্রথম ভিউ কন্ট্রোলারের অভ্যন্তরে আউটলেটটি সংযুক্ত করুন
1 ম ভিসি যখন লোড হয় তখন এই দৃশ্যটি লুকান
বোতামটি ক্লিক করা হলে চিত্রের বিবরণ প্রবেশ করুন ক্লিক করুন
কনটেইনার ভিউ সামগ্রীটি প্রদর্শিত হবে তখন এই দর্শনটি ডিমে করতে ভিউ ব্যাকগ্রাউন্ডটি কালো এবং अस्पष्टতা 30% এ সেট করুন
আমি অন্যান্য স্ট্যাকওভারফ্লো প্রশ্নে পপভিউ ভিউ তৈরির একটি উত্তর যুক্ত করেছি https://stackoverflow.com/a/49729431/5438240
সহজ উত্তর হ'ল একটি সংক্ষিপ্তসার যুক্ত করুন এবং এটি আলফা পরিবর্তন করুন।
UIView *mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
UIView *subView = [[UIView alloc] initWithFrame:popupView.frame];
UIColor * backImgColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"blue_Img.png"]];
subView.backgroundColor = backImgColor;
subView.alpha = 0.5;
[mainView addSubview:subView];