{"id":1543,"date":"2012-03-06T09:24:21","date_gmt":"2012-03-06T09:24:21","guid":{"rendered":"http:\/\/www.mobisoftinfotech.com\/blog\/?p=1543"},"modified":"2020-12-03T19:19:01","modified_gmt":"2020-12-03T13:49:01","slug":"ios-tutorial-custom-speedometer-control","status":"publish","type":"post","link":"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control","title":{"rendered":"iOS Tutorial: Custom Speedometer Control"},"content":{"rendered":"<p class=\"text-center\"><a href=\"\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2012\/03\/Screen-shot-2012-03-06-at-2.24.20-PM.png\"><noscript><img decoding=\"async\" src=\"\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2012\/03\/Screen-shot-2012-03-06-at-2.24.20-PM-159x300.png\" alt=\"SpeedometerDemo\" width=\"159\" height=\"300\"><\/noscript><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20159%20300%22%3E%3C%2Fsvg%3E\" alt=\"SpeedometerDemo\" width=\"159\" height=\"300\" data-src=\"\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2012\/03\/Screen-shot-2012-03-06-at-2.24.20-PM-159x300.png\" class=\" lazyload\"><\/a><\/p>\n<p>Speedometer, Gauge, Speedometer Dial<\/p>\n<p>Step 1 &#8211;Start Xcode and create a View based application with name \u201cSpeedometerDemo\u201d.<\/p>\n<p>Step 2 &#8212;- Open \u201cSpeedometerDemoViewController.h\u201d and put the following code in it.<\/p>\n<pre>[objc]\n\n@interface SpeedometerDemoViewController : UIViewController {\n UIImageView *needleImageView;\n float speedometerCurrentValue;\n float prevAngleFactor;\n float angle;\n NSTimer *speedometer_Timer;\n UILabel *speedometerReading;\n NSString *maxVal;\n\n}\n @property(nonatomic,retain) UIImageView *needleImageView;\n @property(nonatomic,assign) float speedometerCurrentValue;\n @property(nonatomic,assign) float prevAngleFactor;\n @property(nonatomic,assign) float angle;\n @property(nonatomic,retain) NSTimer *speedometer_Timer;\n @property(nonatomic,retain) UILabel *speedometerReading;\n @property(nonatomic,retain) NSString *maxVal;\n\n-(void) addMeterViewContents;\n-(void) rotateIt:(float)angl;\n-(void) rotateNeedle;\n-(void) setSpeedometerCurrentValue;\n-(void) calculateDeviationAngle;\n[\/objc]<\/pre>\n<p>The methods declared are:<\/p>\n<p>addMeterViewContents &#8211; This method is used to add view contents.<\/p>\n<p>rotateIt:(float)angl &#8211; This method is used the set the needle in default position which is 0;<\/p>\n<p>rotateNeedle &#8211; This method rotates the needle.<\/p>\n<p>setSpeedometerCurrentValue &#8211; This method generates random value by which the needle should rotate.<\/p>\n<p>calculateDeviationAngle &#8211; This method calculates the angle of deviation by which the needle should rotate.<\/p>\n<p>Put the following code in the \u201cSliderDemoViewController.m\u201d file.<\/p>\n<pre>[objc highlight=\"28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,127,128,129,130,131,132,133,134,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,158,159,160,161,162,163,164,165,166\"]\n\n@implementation SpeedometerDemoViewController\n @synthesize needleImageView;\n @synthesize speedometerCurrentValue;\n @synthesize prevAngleFactor;\n @synthesize angle;\n @synthesize speedometer_Timer;\n @synthesize speedometerReading;\n @synthesize maxVal;\n\n - (void)viewDidLoad {\n\n\/\/ Add Meter Contents \/\/\n [self addMeterViewContents];\n\n[super viewDidLoad];\n }\n - (void)dealloc {\n [maxVal release];\n [needleImageView release];\n [speedometer_Timer release];\n [speedometerReading release];\n [super dealloc];\n }\n\n#pragma mark -\n#pragma mark addMeterViewContents Methods\n\n-(void) addMeterViewContents\n {\n\nUIImageView *backgroundImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320,460)];\n backgroundImageView.image = [UIImage imageNamed:@&quot;main_bg.png&quot;];\n [self.view addSubview:backgroundImageView];\n [backgroundImageView release];\n\nUIImageView *meterImageView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 40, 286,315)];\n meterImageView.image = [UIImage imageNamed:@&quot;meter.png&quot;];\n [self.view addSubview:meterImageView];\n [meterImageView release];\n\n\/\/  Needle \/\/\n UIImageView *imgNeedle = [[UIImageView alloc]initWithFrame:CGRectMake(143,155, 22, 84)];\n self.needleImageView = imgNeedle;\n [imgNeedle release];\n\nself.needleImageView.layer.anchorPoint = CGPointMake(self.needleImageView.layer.anchorPoint.x, self.needleImageView.layer.anchorPoint.y*2);  \/\/ Shift the Needle center point to one of the end points of the needle image.\n self.needleImageView.backgroundColor = [UIColor clearColor];\n self.needleImageView.image = [UIImage imageNamed:@&quot;arrow.png&quot;];\n [self.view addSubview:self.needleImageView];\n\n\/\/ Needle Dot \/\/\n UIImageView *meterImageViewDot = [[UIImageView alloc]initWithFrame:CGRectMake(131.5, 175, 45,44)];\n meterImageViewDot.image = [UIImage imageNamed:@&quot;center_wheel.png&quot;];\n [self.view addSubview:meterImageViewDot];\n [meterImageViewDot release];\n\n\/\/ Speedometer Reading \/\/\n UILabel *tempReading = [[UILabel alloc] initWithFrame:CGRectMake(125, 250, 60, 30)];\n self.speedometerReading = tempReading;\n [tempReading release];\n self.speedometerReading.textAlignment = UITextAlignmentCenter;\n self.speedometerReading.backgroundColor = [UIColor blackColor];\n self.speedometerReading.text= @&quot;0&quot;;\n self.speedometerReading.textColor = [UIColor colorWithRed:114\/255.f green:146\/255.f blue:38\/255.f alpha:1.0];\n [self.view addSubview:self.speedometerReading ];\n\n\/\/ Set Max Value \/\/\n self.maxVal = @&quot;100&quot;;\n\n\/\/\/ Set Needle pointer initialy at zero \/\/\n [self rotateIt:-118.4];   \/\/ Set the needle pointer initially at zero \/\/\n\n\/\/ Set previous angle \/\/\n self.prevAngleFactor = -118.4;  \/\/ To keep track of previous deviated angle \/\/\n\n\/\/ Set Speedometer Value \/\/\n [self setSpeedometerCurrentValue];\n }\n\n#pragma mark -\n #pragma mark calculateDeviationAngle Method\n\n-(void) calculateDeviationAngle\n {\n\nif([self.maxVal floatValue]&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;0)\n {\n self.angle = ((self.speedometerCurrentValue *237.4)\/[self.maxVal floatValue])-118.4;  \/\/ 237.4 - Total angle between 0 - 100 \/\/\n }\n else\n {\n self.angle = 0;\n }\n\nif(self.angle&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;=-118.4)\n {\n self.angle = -118.4;\n }\n if(self.angle&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;=119)  \/\/ 119 deg is the angle value for 100\n {\n self.angle = 119;\n }\n\n\/\/ If Calculated angle is greater than 180 deg, to avoid the needle to rotate in reverse direction first rotate the needle 1\/3 of the calculated angle and then 2\/3. \/\/\n if(abs(self.angle-self.prevAngleFactor) &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;180)\n {\n [UIView beginAnimations:nil context:nil];\n [UIView setAnimationDuration:0.5f];\n [self rotateIt:self.angle\/3];\n [UIView commitAnimations];\n\n[UIView beginAnimations:nil context:nil];\n [UIView setAnimationDuration:0.5f];\n [self rotateIt:(self.angle*2)\/3];\n [UIView commitAnimations];\n\n}\n self.prevAngleFactor = self.angle;\n\n\/\/ Rotate Needle \/\/\n [self rotateNeedle];\n\n}\n\n#pragma mark -\n #pragma mark rotateNeedle Method\n -(void) rotateNeedle\n {\n [UIView beginAnimations:nil context:nil];\n [UIView setAnimationDuration:0.5f];\n [self.needleImageView setTransform: CGAffineTransformMakeRotation((M_PI \/ 180) * self.angle)];\n [UIView commitAnimations];\n\n}\n\n#pragma mark -\n #pragma mark setSpeedometerCurrentValue\n\n-(void) setSpeedometerCurrentValue\n {\n if(self.speedometer_Timer)\n {\n [self.speedometer_Timer invalidate];\n self.speedometer_Timer = nil;\n }\n self.speedometerCurrentValue =  arc4random() % 100; \/\/ Generate Random value between 0 to 100. \/\/\n\nself.speedometer_Timer = [NSTimer  scheduledTimerWithTimeInterval:2 target:self selector:@selector(setSpeedometerCurrentValue) userInfo:nil repeats:YES];\n\nself.speedometerReading.text = [NSString stringWithFormat:@&quot;%.2f&quot;,self.speedometerCurrentValue];\n\n\/\/ Calculate the Angle by which the needle should rotate \/\/\n [self calculateDeviationAngle];\n }\n #pragma mark -\n #pragma mark Speedometer needle Rotation View Methods\n\n-(void) rotateIt:(float)angl\n {\n [UIView beginAnimations:nil context:nil];\n [UIView setAnimationDuration:0.01f];\n\n[self.needleImageView setTransform: CGAffineTransformMakeRotation((M_PI \/ 180) *angl)];\n\n[UIView commitAnimations];\n }\n\n[\/objc]<\/pre>\n<p>addMeterViewContents &#8211; In this method we set and add different images like needle,speedometer etc, with respect to the view frame.<br>\nIn this method we also move the needle center to one of its end points in order to rotate a needle by a well defined axis and for this we set its anchor points y co-ordinate twice its current y co-ordinate.<\/p>\n<p>rotateIt:(float)angl &#8211; In this method first we find min and max angle by addHoc process and then set the needle in default position which is 0;<\/p>\n<p>calculateDeviationAngle &#8211; In this method we calculate the angle of deviation by which the needle should rotate.<\/p>\n<p>rotateNeedle &#8211; In this method we rotate the needle by the calculate angle of deviation.<\/p>\n<p>setSpeedometerCurrentValue &#8211; In this method we generate random value between 0 and 100 using arc4random function.<\/p>\n<p>Step 3: Save,build and run the project. Now you can see custom speedometer with a moving needle on random generated values, with the value displayed on the label below.<\/p>\n<p>You can download the source code <a href=\"\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2012\/03\/SpeedometerDemo.zip\">SpeedometerDemo<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Speedometer, Gauge, Speedometer Dial Step 1 &#8211;Start Xcode and create a View based application with name \u201cSpeedometerDemo\u201d. Step 2 &#8212;- Open \u201cSpeedometerDemoViewController.h\u201d and put the following code in it. [objc] @interface SpeedometerDemoViewController : UIViewController { UIImageView *needleImageView; float speedometerCurrentValue; float prevAngleFactor; float angle; NSTimer *speedometer_Timer; UILabel *speedometerReading; NSString *maxVal; } @property(nonatomic,retain) UIImageView *needleImageView; @property(nonatomic,assign) float [&hellip;]<\/p>\n","protected":false},"author":15,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_s2mail":"yes","footnotes":""},"categories":[3],"tags":[187,114,328,61],"class_list":["post-1543","post","type-post","status-publish","format-standard","hentry","category-iphone","tag-custom-speedometer","tag-ios","tag-iphone-ipad","tag-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>iOS Tutorial: Custom Speedometer Control - Mobisoft Infotech<\/title>\n<meta name=\"description\" content=\"Click to access a detailed iOS tutorial on Custom Speedometer Control. You can download the source code here.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"iOS Tutorial: Custom Speedometer Control - Mobisoft Infotech\" \/>\n<meta property=\"og:description\" content=\"Click to access a detailed iOS tutorial on Custom Speedometer Control. You can download the source code here.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control\" \/>\n<meta property=\"og:site_name\" content=\"Mobisoft Infotech\" \/>\n<meta property=\"article:published_time\" content=\"2012-03-06T09:24:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-12-03T13:49:01+00:00\" \/>\n<meta name=\"author\" content=\"Prashant Telangi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Prashant Telangi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control#article\",\"isPartOf\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control\"},\"author\":{\"name\":\"Prashant Telangi\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/d7a32c3195dc5efe2829391045ffc070\"},\"headline\":\"iOS Tutorial: Custom Speedometer Control\",\"datePublished\":\"2012-03-06T09:24:21+00:00\",\"dateModified\":\"2020-12-03T13:49:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control\"},\"wordCount\":280,\"commentCount\":0,\"keywords\":[\"Custom Speedometer\",\"iOS\",\"iPhone \u2013 iPad\",\"Tutorial\"],\"articleSection\":[\"iPhone - iPad\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control\",\"url\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control\",\"name\":\"iOS Tutorial: Custom Speedometer Control - Mobisoft Infotech\",\"isPartOf\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#website\"},\"datePublished\":\"2012-03-06T09:24:21+00:00\",\"dateModified\":\"2020-12-03T13:49:01+00:00\",\"author\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/d7a32c3195dc5efe2829391045ffc070\"},\"description\":\"Click to access a detailed iOS tutorial on Custom Speedometer Control. You can download the source code here.\",\"breadcrumb\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/mobisoftinfotech.com\/resources\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"iOS Tutorial: Custom Speedometer Control\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#website\",\"url\":\"https:\/\/mobisoftinfotech.com\/resources\/\",\"name\":\"Mobisoft Infotech\",\"description\":\"Discover Mobility\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/mobisoftinfotech.com\/resources\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/d7a32c3195dc5efe2829391045ffc070\",\"name\":\"Prashant Telangi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/cdde432a920f6002154a0769008dfecabe1f464d11187612020b889ad41808e7?s=96&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cdde432a920f6002154a0769008dfecabe1f464d11187612020b889ad41808e7?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cdde432a920f6002154a0769008dfecabe1f464d11187612020b889ad41808e7?s=96&r=g\",\"caption\":\"Prashant Telangi\"},\"sameAs\":[\"http:\/\/www.mobisoftinfotech.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"iOS Tutorial: Custom Speedometer Control - Mobisoft Infotech","description":"Click to access a detailed iOS tutorial on Custom Speedometer Control. You can download the source code here.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control","og_locale":"en_US","og_type":"article","og_title":"iOS Tutorial: Custom Speedometer Control - Mobisoft Infotech","og_description":"Click to access a detailed iOS tutorial on Custom Speedometer Control. You can download the source code here.","og_url":"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control","og_site_name":"Mobisoft Infotech","article_published_time":"2012-03-06T09:24:21+00:00","article_modified_time":"2020-12-03T13:49:01+00:00","author":"Prashant Telangi","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Prashant Telangi","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control#article","isPartOf":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control"},"author":{"name":"Prashant Telangi","@id":"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/d7a32c3195dc5efe2829391045ffc070"},"headline":"iOS Tutorial: Custom Speedometer Control","datePublished":"2012-03-06T09:24:21+00:00","dateModified":"2020-12-03T13:49:01+00:00","mainEntityOfPage":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control"},"wordCount":280,"commentCount":0,"keywords":["Custom Speedometer","iOS","iPhone \u2013 iPad","Tutorial"],"articleSection":["iPhone - iPad"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control#respond"]}]},{"@type":"WebPage","@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control","url":"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control","name":"iOS Tutorial: Custom Speedometer Control - Mobisoft Infotech","isPartOf":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/#website"},"datePublished":"2012-03-06T09:24:21+00:00","dateModified":"2020-12-03T13:49:01+00:00","author":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/d7a32c3195dc5efe2829391045ffc070"},"description":"Click to access a detailed iOS tutorial on Custom Speedometer Control. You can download the source code here.","breadcrumb":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/iphone\/ios-tutorial-custom-speedometer-control#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/mobisoftinfotech.com\/resources\/"},{"@type":"ListItem","position":2,"name":"iOS Tutorial: Custom Speedometer Control"}]},{"@type":"WebSite","@id":"https:\/\/mobisoftinfotech.com\/resources\/#website","url":"https:\/\/mobisoftinfotech.com\/resources\/","name":"Mobisoft Infotech","description":"Discover Mobility","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mobisoftinfotech.com\/resources\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/d7a32c3195dc5efe2829391045ffc070","name":"Prashant Telangi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/cdde432a920f6002154a0769008dfecabe1f464d11187612020b889ad41808e7?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/cdde432a920f6002154a0769008dfecabe1f464d11187612020b889ad41808e7?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cdde432a920f6002154a0769008dfecabe1f464d11187612020b889ad41808e7?s=96&r=g","caption":"Prashant Telangi"},"sameAs":["http:\/\/www.mobisoftinfotech.com"]}]}},"_links":{"self":[{"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/posts\/1543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/comments?post=1543"}],"version-history":[{"count":58,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/posts\/1543\/revisions"}],"predecessor-version":[{"id":21253,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/posts\/1543\/revisions\/21253"}],"wp:attachment":[{"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/media?parent=1543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/categories?post=1543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/tags?post=1543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}