GithubHelp home page GithubHelp logo

carloperez / mtimagemapview Goto Github PK

View Code? Open in Web Editor NEW

This project forked from stkim1/mtimagemapview

0.0 1.0 0.0 1.36 MB

An image view working like html map.

Home Page: http://stkim1.github.com/MTImageMapView/

License: Other

Objective-C 100.00%

mtimagemapview's Introduction

MTImageMapView

An UIImageView subclass to select a complex polygon map out of many.
Extremely useful for handling touches on, for example, Europe map, or an eye of owl.

Screen Shots

Debug screen Normal screen

Youtube Demo

MTImageMapView Demo

Features

  • Handling multiple maps on an image.1
  • Multiple MTImageMapView on a single view
  • Support Interface Builder, or progmatical initiation
  • Batch mapping. 2
  • Completion block for notifying the end of mapping.3
  • Delegate to provide selected map index
  • Single public class and protocol to implement
  • Debug mode to superimpose maps on an image
  1. There is no limit but you need to be reasonable. In this example, I put around 50.
  2. Mapping takes place in background and prevents UI animation from stuttering.
  3. At the end of mapping, mapping function notifies on main thread.

Support

  • XCode 4.4 or higher required.
  • Works on iOS 4.3 ~ iOS 6.0 ARC/MRC (tested on devices.)
  • Starting from iOS 6.0, dispatch objects are Object-C objects, meaning when you are to go with ARC, dispatch objects too are managed by ARC. You can read more detail at Does ARC support dispatch queues?
    This paricular issue is solved with OS_OBJECT_USE_OBJC flag. You can read more in detail at OMG, GCD+ARC

Implementation

  1. Use tools like Gimp and generate a image map.
  2. Copy only coordinate pairs of the map (e.g. "123,242,452,242,142,322") in NSString type.
  3. Put the strings in an NSArray.
  4. Instantiate MTImageMapView and implement MTImageMapDelegate procotol
  5. pass the array to the map view. (You can use .plist to pass a map batch to a MTImageMapView. )
    MTImageMapView *viewImageMap =\
        [[MTImageMapView alloc]
         initWithImage:
            [UIImage imageNamed:@"sample_image.png"]
         ];

    [viewImageMap setDelegate:self];
    [self.view addSubview:viewImageMap];
    
    NSArray *arrStates = \
        [NSArray arrayWithObjects:
         @"542,94,568,94,568,111,542,111"
         @"555,150,574,150,574,161,555,161"
         @"535,149,551,149,551,159,535,159"
         ,nil];

    [viewImageMap
     setMapping:arrStates
     doneBlock:^(MTImageMapView *imageMapView) {
         NSLog(@"Mapping complete!");
     }];
	-(void)imageMapView:(MTImageMapView *)inImageMapView
	   didSelectMapArea:(NSUInteger)inIndexSelected
	{
	    [[[[UIAlertView alloc]
	     initWithTitle:@"*** State Name ***"
	     message:[stateNames objectAtIndex:inIndexSelected]
	     delegate:nil
	     cancelButtonTitle:@"Ok"
	     otherButtonTitles:nil]
	      autorelease] show];
	}

LIMITS

  • Delegate only receives the index of a map.
  • Coordinates must be provided in pairs.
  • At least 3 pairs of coordinates must be presented.
  • No "rect", "circle" type map is supported. "Polygon" only at this time being.

Credits

US states image and all coordinates are credited to Illinois Center for Information Technology and Web Accessibility.

Question?

Ask to @stkim1

License

BSD license follows (http://www.opensource.org/licenses/bsd-license.php)

Copyright © 2012-2013 Sung-Taek, Kim  All Rights Reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of  source code  must retain  the above  copyright notice,
this list of  conditions and the following  disclaimer. Redistributions in
binary  form must  reproduce  the  above copyright  notice,  this list  of
conditions and the following disclaimer  in the documentation and/or other
materials  provided with  the distribution.  Neither the  name of  Sung-Ta
ek kim nor the names of its contributors may be used to endorse or promote
products  derived  from  this  software  without  specific  prior  written
permission.  THIS  SOFTWARE  IS  PROVIDED BY  THE  COPYRIGHT  HOLDERS  AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A  PARTICULAR PURPOSE  ARE DISCLAIMED.  IN  NO EVENT  SHALL THE  COPYRIGHT
HOLDER OR  CONTRIBUTORS BE  LIABLE FOR  ANY DIRECT,  INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY,  OR CONSEQUENTIAL DAMAGES (INCLUDING,  BUT NOT LIMITED
TO, PROCUREMENT  OF SUBSTITUTE GOODS  OR SERVICES;  LOSS OF USE,  DATA, OR
PROFITS; OR  BUSINESS INTERRUPTION)  HOWEVER CAUSED AND  ON ANY  THEORY OF
LIABILITY,  WHETHER  IN CONTRACT,  STRICT  LIABILITY,  OR TORT  (INCLUDING
NEGLIGENCE  OR OTHERWISE)  ARISING  IN ANY  WAY  OUT OF  THE  USE OF  THIS
SOFTWARE,   EVEN  IF   ADVISED  OF   THE  POSSIBILITY   OF  SUCH   DAMAGE.

VER : 1.1
UPDATED : Jan. 22, 2013

mtimagemapview's People

Watchers

Carlo Perez avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.