Repository: florent37/OCiney-iOS Branch: master Commit: 6e3df1b75dae Files: 277 Total size: 696.8 KB Directory structure: gitextract_j85k_784/ ├── .gitignore ├── Crashlytics.framework/ │ ├── Versions/ │ │ └── A/ │ │ ├── Crashlytics │ │ ├── Headers/ │ │ │ └── Crashlytics.h │ │ ├── Modules/ │ │ │ └── module.modulemap │ │ └── Resources/ │ │ └── Info.plist │ ├── run │ └── submit ├── Fabric.framework/ │ ├── Versions/ │ │ └── A/ │ │ ├── Fabric │ │ ├── Headers/ │ │ │ └── Fabric.h │ │ ├── Modules/ │ │ │ └── module.modulemap │ │ └── Resources/ │ │ └── Info.plist │ └── run ├── Podfile ├── README.md ├── ociney/ │ ├── Base.lproj/ │ │ └── Main.storyboard │ ├── Images.xcassets/ │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ └── LaunchImage.launchimage/ │ │ └── Contents.json │ ├── OCAppDelegate.h │ ├── OCAppDelegate.m │ ├── OCSplashViewController.h │ ├── OCSplashViewController.m │ ├── en.lproj/ │ │ └── InfoPlist.strings │ ├── libs/ │ │ ├── GTAppMenuController/ │ │ │ ├── GTAppMenuController.h │ │ │ └── GTAppMenuController.m │ │ ├── SliddingController/ │ │ │ ├── TTBlackTriangle.h │ │ │ ├── TTBlackTriangle.m │ │ │ ├── TTScrollSlidingPagesController.h │ │ │ ├── TTScrollSlidingPagesController.m │ │ │ ├── TTScrollViewWrapper.h │ │ │ ├── TTScrollViewWrapper.m │ │ │ ├── TTSliddingPageDelegate.h │ │ │ ├── TTSlidingPage.h │ │ │ ├── TTSlidingPage.m │ │ │ ├── TTSlidingPageTitle.h │ │ │ ├── TTSlidingPageTitle.m │ │ │ ├── TTSlidingPagesDataSource.h │ │ │ └── TTUIScrollViewSlidingPages.h │ │ └── Slider/ │ │ ├── TTBlackTriangle.h │ │ ├── TTBlackTriangle.m │ │ ├── TTScrollSlidingPagesController.h │ │ ├── TTScrollSlidingPagesController.m │ │ ├── TTScrollViewWrapper.h │ │ ├── TTScrollViewWrapper.m │ │ ├── TTSliddingPageDelegate.h │ │ ├── TTSlidingPage.h │ │ ├── TTSlidingPage.m │ │ ├── TTSlidingPageTitle.h │ │ ├── TTSlidingPageTitle.m │ │ ├── TTSlidingPagesDataSource.h │ │ └── TTUIScrollViewSlidingPages.h │ ├── main.m │ ├── ociney-Info.plist │ ├── ociney-Prefix.pch │ ├── res/ │ │ └── Base.lproj/ │ │ └── Localizable.strings │ └── src/ │ ├── Controller/ │ │ ├── FeedSmall.h │ │ ├── FeedSmall.m │ │ ├── LeftViewController.h │ │ ├── LeftViewController.m │ │ ├── ListSallesController.h │ │ ├── ListSallesController.m │ │ ├── MovieDetailController.h │ │ ├── MovieDetailController.m │ │ ├── OCCreditsViewController.h │ │ ├── OCCreditsViewController.m │ │ ├── OCDoubleController.h │ │ ├── OCDoubleController.m │ │ ├── OCListMovieViewController.h │ │ ├── OCListMovieViewController.m │ │ ├── OCListViewController.h │ │ ├── OCListViewController.m │ │ ├── OCPosterController.h │ │ ├── OCPosterController.m │ │ ├── OCRechercheSearchBarController.h │ │ ├── OCRechercheSearchBarController.m │ │ ├── OCStarDetailViewController.h │ │ ├── OCStarDetailViewController.m │ │ ├── OCStarListController.h │ │ ├── OCStarListController.m │ │ ├── OCTheaterDetailController.h │ │ ├── OCTheaterDetailController.m │ │ ├── OCTheaterDetailMovieController.h │ │ ├── OCTheaterDetailMovieController.m │ │ ├── SlidingImageControllerController.h │ │ └── SlidingImageControllerController.m │ ├── Modele/ │ │ ├── AllocineResponse.h │ │ ├── AllocineResponse.m │ │ ├── AllocineResponseSmall.h │ │ ├── AllocineResponseSmall.m │ │ ├── CastMember.h │ │ ├── CastMember.m │ │ ├── CastingShort.h │ │ ├── CastingShort.m │ │ ├── DefaultMedia.h │ │ ├── DefaultMedia.m │ │ ├── Distributor.h │ │ ├── Distributor.m │ │ ├── Feature.h │ │ ├── Feature.m │ │ ├── Feed.h │ │ ├── Feed.m │ │ ├── Geoloc.h │ │ ├── Geoloc.m │ │ ├── HelpfulNegativeReview.h │ │ ├── HelpfulNegativeReview.m │ │ ├── HelpfulPositiveReview.h │ │ ├── HelpfulPositiveReview.m │ │ ├── Horaires.h │ │ ├── Horaires.m │ │ ├── Link.h │ │ ├── Link.m │ │ ├── Media.h │ │ ├── Media.m │ │ ├── ModelObject.h │ │ ├── ModelObject.m │ │ ├── Movie.h │ │ ├── Movie.m │ │ ├── MovieShowtime.h │ │ ├── MovieShowtime.m │ │ ├── MovieType.h │ │ ├── MovieType.m │ │ ├── Name.h │ │ ├── Name.m │ │ ├── News.h │ │ ├── News.m │ │ ├── NewsSource.h │ │ ├── NewsSource.m │ │ ├── OnShow.h │ │ ├── OnShow.m │ │ ├── Participation.h │ │ ├── Participation.m │ │ ├── Person.h │ │ ├── Person.m │ │ ├── PersonFull.h │ │ ├── PersonFull.m │ │ ├── PersonSmall.h │ │ ├── PersonSmall.m │ │ ├── Picture.h │ │ ├── Picture.m │ │ ├── Place.h │ │ ├── Place.m │ │ ├── Poster.h │ │ ├── Poster.m │ │ ├── Protocole.h │ │ ├── Publication.h │ │ ├── Publication.m │ │ ├── Release.h │ │ ├── Release.m │ │ ├── Rendition.h │ │ ├── Rendition.m │ │ ├── Review.h │ │ ├── Review.m │ │ ├── Scr.h │ │ ├── Scr.m │ │ ├── Statistics.h │ │ ├── Statistics.m │ │ ├── Subject.h │ │ ├── Subject.m │ │ ├── Theater.h │ │ ├── Theater.m │ │ ├── TheaterShowtime.h │ │ ├── TheaterShowtime.m │ │ ├── Thumbnail.h │ │ ├── Thumbnail.m │ │ ├── Trailer.h │ │ ├── Trailer.m │ │ ├── Trivium.h │ │ ├── Trivium.m │ │ ├── Version.h │ │ ├── Version.m │ │ ├── Writer.h │ │ └── Writer.m │ ├── Service/ │ │ ├── AllocineService.h │ │ ├── AllocineService.m │ │ ├── ServiceSecurity.h │ │ └── ServiceSecurity.m │ ├── Task/ │ │ ├── AsyncTask.h │ │ ├── AsyncTask.m │ │ ├── LoadBandeAnnonceFilmTask.h │ │ ├── LoadBandeAnnonceFilmTask.m │ │ ├── LoadMovieFullTask.h │ │ ├── LoadMovieFullTask.m │ │ ├── OCLoadMoviesTask.h │ │ ├── OCLoadMoviesTask.m │ │ ├── OCLoadPersonTask.h │ │ ├── OCLoadPersonTask.m │ │ ├── OCLoadShowTimesTask.h │ │ ├── OCLoadShowTimesTask.m │ │ ├── OCLoadStarsTask.h │ │ ├── OCLoadStarsTask.m │ │ ├── OCLoadTheaterMoviesTask.h │ │ ├── OCLoadTheaterMoviesTask.m │ │ ├── OCLoadTheatersTask.h │ │ ├── OCLoadTheatersTask.m │ │ ├── RechercheTask.h │ │ ├── RechercheTask.m │ │ ├── RechercheTaskMovie.h │ │ ├── RechercheTaskMovie.m │ │ ├── RechercheTaskStar.h │ │ ├── RechercheTaskStar.m │ │ ├── RechercheTaskTheater.h │ │ └── RechercheTaskTheater.m │ ├── Utils/ │ │ ├── Color+Hex.h │ │ ├── Color+Hex.m │ │ ├── Constantes.h │ │ ├── DateUtils.h │ │ ├── DateUtils.m │ │ ├── UIImage+Blur.h │ │ └── UIImage+Blur.m │ └── View/ │ ├── CellTheaterHoraires.h │ ├── CellTheaterHoraires.m │ ├── HeaderMovieDetail.h │ ├── HeaderMovieDetail.m │ ├── HeaderStarDetail.h │ ├── HeaderStarDetail.m │ ├── MovieDetailContent.h │ ├── MovieDetailContent.m │ ├── MovieDetailTheaterList.h │ ├── MovieDetailTheaterList.m │ ├── OCCastMember.h │ ├── OCCastMember.m │ ├── OCEmptyView.h │ ├── OCEmptyView.m │ ├── OCEmptyViewGPS.h │ ├── OCEmptyViewGPS.m │ ├── OCFilmoElement.h │ ├── OCFilmoElement.m │ ├── OCFilmoGridLayout.h │ ├── OCFilmoGridLayout.m │ ├── OCHeaderVersionView.h │ ├── OCHeaderVersionView.m │ ├── OCLoader.h │ ├── OCLoader.m │ ├── OCMovieBandeAnnonceSlider.h │ ├── OCMovieBandeAnnonceSlider.m │ ├── OCMovieBandeAnnonceSliderElement.h │ ├── OCMovieBandeAnnonceSliderElement.m │ ├── OCMovieDelegates.h │ ├── OCMovieDetailStarList.h │ ├── OCMovieDetailStarList.m │ ├── OCMovieViewPager.h │ ├── OCMovieViewPager.m │ ├── OCStarFilmoGrid.h │ ├── OCStarFilmoGrid.m │ ├── OCStarPhoto.h │ ├── OCStarPhoto.m │ ├── OCStarViewPager.h │ ├── OCStarViewPager.m │ ├── PosterView.h │ ├── PosterView.m │ ├── StarDetail.h │ ├── StarDetail.m │ ├── StarDetailDelegate.h │ ├── StarDetailPhotos.h │ ├── StarDetailPhotos.m │ ├── TheaterDetailMovieBackground.h │ ├── TheaterDetailMovieBackground.m │ ├── TheaterDetailMovieForeground.h │ ├── TheaterDetailMovieForeground.m │ ├── TheaterDetailMoviePageHoraires.h │ ├── TheaterDetailMoviePageHoraires.m │ ├── ViewPager.h │ ├── ViewPager.m │ └── cell/ │ ├── OCMovieCell.h │ ├── OCMovieCell.m │ ├── OCMovieCell.xib │ ├── OCStarCell.h │ ├── OCStarCell.m │ ├── OCStarCell.xib │ ├── SalleCell.h │ ├── SalleCell.m │ └── SalleCell.xib ├── ociney.xcodeproj/ │ ├── project.pbxproj │ └── project.xcworkspace/ │ └── contents.xcworkspacedata ├── ociney.xcworkspace/ │ └── contents.xcworkspacedata └── ocineyTests/ ├── en.lproj/ │ └── InfoPlist.strings ├── ocineyTests-Info.plist └── ocineyTests.m ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # Xcode # build/ *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata *.xccheckout *.moved-aside DerivedData *.hmap *.ipa *.xcuserstate # CocoaPods # # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control # Pods/ ================================================ FILE: Crashlytics.framework/Versions/A/Headers/Crashlytics.h ================================================ // // Crashlytics.h // Crashlytics // // Copyright 2013 Crashlytics, Inc. All rights reserved. // #import /** * * The CLS_LOG macro provides as easy way to gather more information in your log messages that are * sent with your crash data. CLS_LOG prepends your custom log message with the function name and * line number where the macro was used. If your app was built with the DEBUG preprocessor macro * defined CLS_LOG uses the CLSNSLog function which forwards your log message to NSLog and CLSLog. * If the DEBUG preprocessor macro is not defined CLS_LOG uses CLSLog only. * * Example output: * -[AppDelegate login:] line 134 $ login start * * If you would like to change this macro, create a new header file, unset our define and then define * your own version. Make sure this new header file is imported after the Crashlytics header file. * * #undef CLS_LOG * #define CLS_LOG(__FORMAT__, ...) CLSNSLog... * **/ #ifdef DEBUG #define CLS_LOG(__FORMAT__, ...) CLSNSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) #else #define CLS_LOG(__FORMAT__, ...) CLSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) #endif /** * * Add logging that will be sent with your crash data. This logging will not show up in the system.log * and will only be visible in your Crashlytics dashboard. * **/ OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); OBJC_EXTERN void CLSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0); /** * * Add logging that will be sent with your crash data. This logging will show up in the system.log * and your Crashlytics dashboard. It is not recommended for Release builds. * **/ OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); OBJC_EXTERN void CLSNSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0); @protocol CrashlyticsDelegate; @interface Crashlytics : NSObject @property (nonatomic, readonly, copy) NSString *apiKey; @property (nonatomic, readonly, copy) NSString *version; @property (nonatomic, assign) BOOL debugMode; @property (nonatomic, assign) NSObject *delegate; /** * * The recommended way to install Crashlytics into your application is to place a call * to +startWithAPIKey: in your -application:didFinishLaunchingWithOptions: method. * * This delay defaults to 1 second in order to generally give the application time to * fully finish launching. * **/ + (Crashlytics *)startWithAPIKey:(NSString *)apiKey; + (Crashlytics *)startWithAPIKey:(NSString *)apiKey afterDelay:(NSTimeInterval)delay; /** * * If you need the functionality provided by the CrashlyticsDelegate protocol, you can use * these convenience methods to activate the framework and set the delegate in one call. * **/ + (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(NSObject *)delegate; + (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(NSObject *)delegate afterDelay:(NSTimeInterval)delay; /** * * Access the singleton Crashlytics instance. * **/ + (Crashlytics *)sharedInstance; /** * * The easiest way to cause a crash - great for testing! * **/ - (void)crash; /** * * Many of our customers have requested the ability to tie crashes to specific end-users of their * application in order to facilitate responses to support requests or permit the ability to reach * out for more information. We allow you to specify up to three separate values for display within * the Crashlytics UI - but please be mindful of your end-user's privacy. * * We recommend specifying a user identifier - an arbitrary string that ties an end-user to a record * in your system. This could be a database id, hash, or other value that is meaningless to a * third-party observer but can be indexed and queried by you. * * Optionally, you may also specify the end-user's name or username, as well as email address if you * do not have a system that works well with obscured identifiers. * * Pursuant to our EULA, this data is transferred securely throughout our system and we will not * disseminate end-user data unless required to by law. That said, if you choose to provide end-user * contact information, we strongly recommend that you disclose this in your application's privacy * policy. Data privacy is of our utmost concern. * **/ - (void)setUserIdentifier:(NSString *)identifier; - (void)setUserName:(NSString *)name; - (void)setUserEmail:(NSString *)email; + (void)setUserIdentifier:(NSString *)identifier; + (void)setUserName:(NSString *)name; + (void)setUserEmail:(NSString *)email; /** * * Set a value for a key to be associated with your crash data. * **/ - (void)setObjectValue:(id)value forKey:(NSString *)key; - (void)setIntValue:(int)value forKey:(NSString *)key; - (void)setBoolValue:(BOOL)value forKey:(NSString *)key; - (void)setFloatValue:(float)value forKey:(NSString *)key; + (void)setObjectValue:(id)value forKey:(NSString *)key; + (void)setIntValue:(int)value forKey:(NSString *)key; + (void)setBoolValue:(BOOL)value forKey:(NSString *)key; + (void)setFloatValue:(float)value forKey:(NSString *)key; @end /** * The CLSCrashReport protocol exposes methods that you can call on crash report objects passed * to delegate methods. If you want these values or the entire object to stay in memory retain * them or copy them. **/ @protocol CLSCrashReport @required /** * Returns the session identifier for the crash report. **/ @property (nonatomic, readonly) NSString *identifier; /** * Returns the custom key value data for the crash report. **/ @property (nonatomic, readonly) NSDictionary *customKeys; /** * Returns the CFBundleVersion of the application that crashed. **/ @property (nonatomic, readonly) NSString *bundleVersion; /** * Returns the CFBundleShortVersionString of the application that crashed. **/ @property (nonatomic, readonly) NSString *bundleShortVersionString; /** * Returns the date that the application crashed at. **/ @property (nonatomic, readonly) NSDate *crashedOnDate; /** * Returns the os version that the application crashed on. **/ @property (nonatomic, readonly) NSString *OSVersion; /** * Returns the os build version that the application crashed on. **/ @property (nonatomic, readonly) NSString *OSBuildVersion; @end /** * * The CrashlyticsDelegate protocol provides a mechanism for your application to take * action on events that occur in the Crashlytics crash reporting system. You can make * use of these calls by assigning an object to the Crashlytics' delegate property directly, * or through the convenience startWithAPIKey:delegate:... methods. * **/ @protocol CrashlyticsDelegate @optional /** * * Called once a Crashlytics instance has determined that the last execution of the * application ended in a crash. This is called some time after the crash reporting * process has begun. If you have specified a delay in one of the * startWithAPIKey:... calls, this will take at least that long to be invoked. * **/ - (void)crashlyticsDidDetectCrashDuringPreviousExecution:(Crashlytics *)crashlytics; /** * * Just like crashlyticsDidDetectCrashDuringPreviousExecution this delegate method is * called once a Crashlytics instance has determined that the last execution of the * application ended in a crash. A CLSCrashReport is passed back that contains data about * the last crash report that was generated. See the CLSCrashReport protocol for method details. * This method is called after crashlyticsDidDetectCrashDuringPreviousExecution. * **/ - (void)crashlytics:(Crashlytics *)crashlytics didDetectCrashDuringPreviousExecution:(id )crash; @end /** * `CrashlyticsKit` can be used as a parameter to `[Fabric with:@[CrashlyticsKit]];` in Objective-C. In Swift, simply use `Crashlytics()` */ #define CrashlyticsKit [Crashlytics sharedInstance] ================================================ FILE: Crashlytics.framework/Versions/A/Modules/module.modulemap ================================================ framework module Crashlytics { umbrella header "Crashlytics.h" export * module * { export * } } ================================================ FILE: Crashlytics.framework/Versions/A/Resources/Info.plist ================================================ CFBundleDevelopmentRegion English CFBundleGetInfoString Crashlytics Framework CFBundleIdentifier com.twitter.crashlytics.ios CFBundleInfoDictionaryVersion 6.0 CFBundleName Crashlytics CFBundlePackageType FMWK CFBundleShortVersionString 2.2.9+kit CFBundleSupportedPlatforms iPhoneOS iPhoneSimulator MacOSX CFBundleVersion 44 NSHumanReadableCopyright Copyright 2014 Twitter Inc. ================================================ FILE: Fabric.framework/Versions/A/Headers/Fabric.h ================================================ // // Fabric.h // // Copyright (c) 2014 Twitter. All rights reserved. // #import /** * Fabric Base. Coordinates configuration and starts all provided kits. */ @interface Fabric : NSObject /** * Initialize Fabric and all provided kits. Call this method within your App Delegate's * `application:didFinishLaunchingWithOptions:` and provide the kits you wish to use. * * For example, in Objective-C: * * `[Fabric with:@[TwitterKit, CrashlyticsKit, MoPubKit]];` * * Swift: * * `Fabric.with([Twitter(), Crashlytics(), MoPub()])` * * @param kits An array of kit instances. Kits may provide a macro such as CrashlyticsKit which can be passed in as array elements in objective-c. * * @return Returns the shared Fabric instance. In most cases this can be ignored. */ + (instancetype)with:(NSArray *)kits; /** * Returns the Fabric singleton object. */ + (instancetype)sharedSDK; /** * This BOOL enables or disables debug logging, such as kit version information. The default value is NO. */ @property (nonatomic, assign) BOOL debug; /** * Unavailable. Use `+sharedSDK` to retrieve the shared Fabric instance. */ - (id)init __attribute__((unavailable("Use +sharedSDK to retrieve the shared Fabric instance."))); /** * Returns Fabrics's instance of the specified kit. * * @param klass The class of the kit. * * @return The kit instance of class klass which was provided to with: or nil. */ - (id)kitForClass:(Class)klass; /** * Returns a dictionary containing the kit configuration info for the provided kit. * The configuration information is parsed from the application's Info.plist. This * method is primarily intended to be used by kits to retrieve their configuration. * * @param kitInstance An instance of the kit whose configuration should be returned. * * @return A dictionary containing kit specific configuration information or nil if none exists. */ - (NSDictionary *)configurationDictionaryForKit:(id)kitInstance; @end ================================================ FILE: Fabric.framework/Versions/A/Modules/module.modulemap ================================================ framework module Fabric { umbrella header "Fabric.h" export * module * { export * } } ================================================ FILE: Fabric.framework/Versions/A/Resources/Info.plist ================================================ CFBundleDevelopmentRegion English CFBundleGetInfoString Fabric Framework CFBundleIdentifier io.fabric.sdk.ios CFBundleInfoDictionaryVersion 6.0 CFBundleName Fabric CFBundlePackageType FMWK CFBundleShortVersionString 1.1.1 CFBundleSupportedPlatforms iPhoneOS iPhoneSimulator MacOSX CFBundleVersion 1.1.1 NSHumanReadableCopyright Copyright 2014 Twitter Inc. ================================================ FILE: Podfile ================================================ # Uncomment this line to define a global platform for your project platform :ios, "8.1" target "ociney" do pod 'AFNetworking', '~> 2.0' pod 'JSONModel' pod 'SDWebImage', '~>3.6' pod 'GPUImage' pod 'AnalyticsKit/GoogleAnalytics' pod 'ECSlidingViewController', '~> 2.0.2' pod 'EDStarRating' pod 'JBParallaxCell', "~>0.0.1" pod 'DKScrollingTabController' pod 'SwipeView' , "~>1.3.2" pod 'AnalyticsKit/GoogleAnalytics' # ignore all warnings from all pods inhibit_all_warnings! end ================================================ FILE: README.md ================================================ # OCiney OCiney is a sample app available on iTune : https://itunes.apple.com/us/app/id955480687 I was firstly built to test a few different implementations of a details page. ![alt text](https://raw.githubusercontent.com/florent37/OCiney-iOS/master/screens/1.png?raw=true) ![alt text](https://raw.githubusercontent.com/florent37/OCiney-iOS/master/screens/2.png?raw=true) ![alt text](https://raw.githubusercontent.com/florent37/OCiney-iOS/master/screens/3.png?raw=true) ![alt text](https://raw.githubusercontent.com/florent37/OCiney-iOS/master/screens/4.png?raw=true) ![alt text](https://raw.githubusercontent.com/florent37/OCiney-iOS/master/screens/5.png?raw=true) OCiney is a movie application, open-source version of Allociné, but - With an other design - With an other ergonomy - Open source :D ### Tech ### Development Want to contribute? Feel free! ### Todo's License ---- Copyright (c) <2014>, All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. 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. 3. All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by the . 4. Neither the name of the 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 ''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 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. ================================================ FILE: ociney/Base.lproj/Main.storyboard ================================================ ================================================ FILE: ociney/Images.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "idiom" : "iphone", "size" : "29x29", "scale" : "1x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "Icon-Small@2x.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "Icon-Small@3x.png", "scale" : "3x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "Icon-40@2x.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "Icon-40@3x.png", "scale" : "3x" }, { "size" : "57x57", "idiom" : "iphone", "filename" : "Icon.png", "scale" : "1x" }, { "size" : "57x57", "idiom" : "iphone", "filename" : "Icon@2x.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "Icon-60@2x.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "Icon-60@3x.png", "scale" : "3x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "Icon-Small.png", "scale" : "1x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "2x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "Icon-40.png", "scale" : "1x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "2x" }, { "size" : "50x50", "idiom" : "ipad", "filename" : "Icon-Small-50.png", "scale" : "1x" }, { "size" : "50x50", "idiom" : "ipad", "filename" : "Icon-Small-50@2x.png", "scale" : "2x" }, { "size" : "72x72", "idiom" : "ipad", "filename" : "Icon-72.png", "scale" : "1x" }, { "size" : "72x72", "idiom" : "ipad", "filename" : "Icon-72@2x.png", "scale" : "2x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "Icon-76.png", "scale" : "1x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "Icon-76@2x.png", "scale" : "2x" }, { "size" : "512x512", "idiom" : "mac", "filename" : "iTunesArtwork.png", "scale" : "1x" }, { "size" : "512x512", "idiom" : "mac", "filename" : "iTunesArtwork@2x.png", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: ociney/Images.xcassets/LaunchImage.launchimage/Contents.json ================================================ { "images" : [ { "orientation" : "portrait", "idiom" : "iphone", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "2x" }, { "orientation" : "portrait", "idiom" : "iphone", "subtype" : "retina4", "extent" : "full-screen", "minimum-system-version" : "7.0", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: ociney/OCAppDelegate.h ================================================ // // OCAppDelegate.h // ociney // // Created by Florent Champigny on 21/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "ECSlidingViewController.h" #import "RechercheTask.h" #import #define APP_DELEGATE (OCAppDelegate*)[UIApplication sharedApplication].delegate @interface OCAppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @property (atomic, strong) UINavigationController *navigationController; @property (atomic, strong) ECSlidingViewController *slidingViewController; @property (nonatomic, strong) UIButton *menu; @property (strong, nonatomic) NSMutableArray * moviesList; -(void)lancerVueFilm:(NSArray *) movieList; -(void) changeTopViewController:(NSInteger)tagController; -(void)toggleLeftDrawer; @property (strong, nonatomic) UIWindow *frontWindow; @property (strong, nonatomic) UIWindow *backWindow; -(void)cacherMenu:(BOOL)cacher; -(void)cacherBoutonRecherche:(BOOL)cacher; -(void)cacherSearchBar:(BOOL)cacher; -(void)fermerSearchBar:(BOOL)fermer andCacherRecherche:(BOOL)cacher; // Search Bar @property (nonatomic, strong) UIButton *search; @property (nonatomic, assign) BOOL openSearch; @property (strong,nonatomic) UISearchBar *searchBar; @property (strong,nonatomic) NSString * placeholderSearch; @property (strong, nonatomic) CLLocation *myLocationGPS; @property (strong,nonatomic) RechercheTask * task; -(void)searchBarMore:(NSInteger)page; -(void)displayDetailScreen:(BOOL)secondScreen; @end ================================================ FILE: ociney/OCAppDelegate.m ================================================ // // OCAppDelegate.m // ociney // // Created by Florent Champigny on 21/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCAppDelegate.h" #import "OCSplashViewController.h" #import "LeftViewController.h" #import "OCListMovieViewController.h" #import "OCStarListController.h" #import "Constantes.h" #import "GTAppMenuController.h" #import "MovieDetailController.h" #import "Color+Hex.h" #import "ListSallesController.h" #import #import #import "OCTheaterDetailMovieController.h" #import "OCCreditsViewController.h" #import "AnalyticsKit.h" #import "AnalyticsKitGoogleAnalyticsProvider.h" @interface OCAppDelegate(){ NSInteger tagControllerActive; } @end @implementation OCAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [Fabric with:@[CrashlyticsKit]]; NSString *googleTrackId = @"UA-58169759-1"; #if DEBUG googleTrackId = @""; #endif AnalyticsKitGoogleAnalyticsProvider *google = [[AnalyticsKitGoogleAnalyticsProvider alloc] initWithTrackingID:googleTrackId]; [AnalyticsKit initializeLoggers:@[google]]; [application setStatusBarHidden:NO]; [application setStatusBarStyle:UIStatusBarStyleLightContent]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.navigationController = [[UINavigationController alloc] initWithRootViewController: [[OCSplashViewController alloc] init]]; [[self navigationController] setNavigationBarHidden:YES animated:YES]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; self.window.rootViewController = self.navigationController; [self.window makeKeyAndVisible]; self.myLocationGPS = nil; return YES; } -(void)lancerVueFilm:(NSArray *) movieList{ tagControllerActive = FILMS_MENU; LeftViewController *underLeftViewController = [[LeftViewController alloc] init]; OCListMovieViewController * topController = [[OCListMovieViewController alloc]init]; [topController.array addObjectsFromArray:movieList]; self.moviesList = [topController.array mutableCopy]; self.navigationController = [[UINavigationController alloc] initWithRootViewController:topController]; UINavigationController* leftNav = [[UINavigationController alloc] initWithRootViewController:underLeftViewController]; leftNav.navigationBarHidden = NO; UIColor* barColor = [UIColor blackColor]; self.navigationController.navigationBar.barTintColor = barColor; self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; self.navigationController.navigationBar.opaque = YES; self.navigationController.navigationBar.translucent = NO; leftNav.navigationBar.barTintColor = barColor; leftNav.navigationBar.opaque = YES; leftNav.navigationBar.translucent = NO; UIView* nav = self.navigationController.navigationBar.viewForBaselineLayout; { self.menu = [[UIButton alloc] initWithFrame:CGRectMake(10, 0, 20, 20)]; self.menu.center = CGPointMake(self.menu.center.x, nav.center.y); [self.menu setImage:[UIImage imageNamed:@"menu"] forState:UIControlStateNormal]; self.menu.alpha = 0.8; self.menu.imageView.contentMode = UIViewContentModeScaleAspectFit; [nav addSubview:self.menu]; [self.menu addTarget:self action:@selector(toggleLeftDrawer) forControlEvents:UIControlEventTouchUpInside]; } { self.search = [[UIButton alloc] initWithFrame:CGRectMake(nav.frame.size.width - 35, 0, 25, 25)]; self.search.center = CGPointMake(self.search.center.x, nav.center.y); [self.search setImage:[UIImage imageNamed:@"ic_action_search.png"] forState:UIControlStateNormal]; self.search.imageView.contentMode = UIViewContentModeScaleAspectFit; [nav addSubview:self.search]; self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(nav.frame.size.width - 35, 0, 0, nav.frame.size.height)]; self.searchBar.delegate = self; self.searchBar.showsCancelButton = YES; self.searchBar.barStyle = UIBarStyleBlack; [nav addSubview:self.searchBar]; self.openSearch = NO; [self.search addTarget:self action:@selector(editSearch:) forControlEvents:UIControlEventTouchUpInside]; } // configure under left view controller underLeftViewController.edgesForExtendedLayout = UIRectEdgeTop | UIRectEdgeBottom | UIRectEdgeLeft; // don't go under the top view // configure sliding view controller self.slidingViewController = [ECSlidingViewController slidingWithTopViewController:self.navigationController]; self.slidingViewController.underLeftViewController = leftNav; self.slidingViewController.anchorLeftPeekAmount = 60.0; self.slidingViewController.anchorRightPeekAmount = 60.0; self.slidingViewController.defaultTransitionDuration = 0.18; // enable swiping on the top view [self enableSwipeGesture:YES]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.rootViewController = self.slidingViewController; [self.window makeKeyAndVisible]; } -(void)displayDetailScreen:(BOOL)secondScreen{ if(secondScreen) { //detail [self enableSwipeGesture:NO]; [self cacherMenu:YES]; }else { //menu [self enableSwipeGesture:YES]; [self cacherMenu:NO]; } } -(void)enableSwipeGesture:(BOOL)enable { if(enable){ // enable swiping on the top view [self.navigationController.view addGestureRecognizer:self.slidingViewController.panGesture]; }else{ // enable swiping on the top view [self.navigationController.view removeGestureRecognizer:self.slidingViewController.panGesture]; } } -(void) editSearch:(UIButton *)sender { [self fermerSearchBar:NO andCacherRecherche:NO]; } - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { [self fermerSearchBar:YES andCacherRecherche:NO]; [self.searchBar resignFirstResponder]; } - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { [self.task execute:@[searchBar.text]]; [self.searchBar resignFirstResponder]; } -(void)searchBarMore:(NSInteger)page{ [self.task execute:@[self.searchBar.text,@(page)]]; } - (void)toggleLeftDrawer{ if ([self.slidingViewController currentTopViewPosition] == ECSlidingViewControllerTopViewPositionAnchoredRight) { [self.slidingViewController resetTopViewAnimated:YES]; }else{ [self.slidingViewController anchorTopViewToRightAnimated:YES]; } } -(NSString *) titleWithTag{ NSString * title; switch (tagControllerActive) { case FILMS_MENU: { title = @"Films"; } break; case STARTS_MENU: { title = @"Stars"; } break; case SALLES_MENU: { title = @"Salles"; } break; default: { title = NSLocalizedString(@"app_name", nil); } break; } return title; } -(void) changeTopViewController:(NSInteger)tagController{ if(tagController != tagControllerActive){ UIViewController * topController = nil; tagControllerActive = tagController; switch (tagController) { case FILMS_MENU: { topController = [[OCListMovieViewController alloc]init]; ((OCListMovieViewController *)topController).array = [self.moviesList mutableCopy]; break; } case STARTS_MENU: { topController = [[OCStarListController alloc]init]; } break; case SALLES_MENU: { topController = [[ListSallesController alloc]init]; } break; case FAVORIS_MENU: { topController = [[OCListMovieViewController alloc]init]; } break; case CREDITS_MENU: { topController = [[OCCreditsViewController alloc]init]; } break; default: { topController = [[OCListMovieViewController alloc]init]; } break; } [topController setTitle:[self titleWithTag]]; [self.navigationController setViewControllers: [NSArray arrayWithObject: topController] animated: NO]; [self.slidingViewController resetTopViewAnimated:YES]; //[self cacherMenu:YES]; [self.searchBar setText:@""]; if([topController isKindOfClass:[OCCreditsViewController class]]) [self fermerSearchBar:YES andCacherRecherche:YES]; else [self fermerSearchBar:YES andCacherRecherche:NO]; [self enableSwipeGesture:YES]; } } -(void)cacherMenu:(BOOL)cacher{ self.menu.hidden = cacher; } -(void)cacherBoutonRecherche:(BOOL)cacher{ [UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^(void) { self.search.hidden = cacher; }completion:^(BOOL finished) { [self.searchBar resignFirstResponder]; } ]; } -(void)cacherSearchBar:(BOOL)cacher{ self.searchBar.hidden = cacher; [self.searchBar resignFirstResponder]; } -(void)fermerSearchBar:(BOOL)fermer andCacherRecherche:(BOOL)cacher{ if(fermer){ [self.navigationController.topViewController setTitle:[self titleWithTag]]; [UIView animateWithDuration:0.05 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^(void) { self.searchBar.frame = CGRectMake(65, self.searchBar.frame.origin.y, 0, self.searchBar.frame.size.height); } completion:^(BOOL finished) { self.search.hidden = cacher; [self.searchBar resignFirstResponder]; } ]; [self.task.cancelDelegate onCancelSearch]; }else{ [self.searchBar setPlaceholder:self.placeholderSearch]; [self.navigationController.topViewController setTitle:@""]; self.search.hidden = YES; [UIView animateWithDuration:0.05 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^(void) { self.searchBar.frame = CGRectMake(65, self.searchBar.frame.origin.y, 250, self.searchBar.frame.size.height); [self.searchBar becomeFirstResponder]; } completion:^(BOOL finished) {} ]; } } @end ================================================ FILE: ociney/OCSplashViewController.h ================================================ // // OCViewController.h // ociney // // Created by Florent Champigny on 21/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "OCLoadMoviesTask.h" @interface OCSplashViewController : UIViewController @property (strong, nonatomic) OCLoadMoviesTask *task; @end ================================================ FILE: ociney/OCSplashViewController.m ================================================ // // OCViewController.m // ociney // // Created by Florent Champigny on 21/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCSplashViewController.h" #import "Color+Hex.h" #import "OCListMovieViewController.h" #import "OCAppDelegate.h" @interface OCSplashViewController (){ UIView * fondStripe; UILabel * descriptif; UIView * splash_logo; UIImageView * ic_glass; UIImageView * ic_text_ociney; UIImageView * ic_drawer_film; OCAppDelegate * appDelegate; } @end @implementation OCSplashViewController #define DEGREES_IN_RADIANS(x) (M_PI * x / 180.0); - (void)viewDidLoad { [super viewDidLoad]; [self.view setBackgroundColor:[UIColor colorFromHexString:GRAY]]; appDelegate = ((OCAppDelegate*)[[UIApplication sharedApplication] delegate]); fondStripe = [[UIView alloc] initWithFrame:CGRectZero]; fondStripe.alpha = 0.2f; [fondStripe setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"splash_motif_stripes_black.png"]]]; [self.view addSubview:fondStripe]; descriptif = [[UILabel alloc]initWithFrame:CGRectZero]; [descriptif setTextColor:[UIColor whiteColor]]; descriptif.textAlignment = NSTextAlignmentCenter; //[UIFont fontWithName:@"Roboto-Light" size:13] descriptif.font = [UIFont systemFontOfSize:12]; [descriptif setText:@"FILMS | HORAIRES | CRITIQUES | CASTING"]; [self.view addSubview:descriptif]; splash_logo = [[UIView alloc]initWithFrame:CGRectZero]; ic_glass = [[UIImageView alloc]initWithFrame:CGRectZero]; ic_glass.image = [UIImage imageNamed:@"ic_glass_reflect_color_big.png"]; [splash_logo addSubview:ic_glass]; ic_text_ociney = [[UIImageView alloc]initWithFrame:CGRectZero]; ic_text_ociney.image = [UIImage imageNamed:@"ic_txt_ociney.png"]; [splash_logo addSubview:ic_text_ociney]; [self.view addSubview:splash_logo]; ic_drawer_film = [[UIImageView alloc]initWithFrame:CGRectZero]; ic_drawer_film.image = [UIImage imageNamed:@"ic_drawer_films.png"]; [self.view addSubview:ic_drawer_film]; CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; [fullRotation setFromValue:[NSNumber numberWithFloat:0]]; [fullRotation setToValue:[NSNumber numberWithFloat:((2*M_PI))]]; fullRotation.speed = 5.0f; fullRotation.duration = 5.5; fullRotation.repeatCount = 1; fullRotation.repeatCount = HUGE_VALF; [[ic_drawer_film layer] addAnimation:fullRotation forKey:@"transform.rotation"]; self.task = [[OCLoadMoviesTask alloc]initWithDelegate:self]; [self.task execute:@[@"nowshowing",@"small",@"toprank",@20,@1]]; } -(void) viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [[self navigationController] setNavigationBarHidden:YES animated:NO]; fondStripe.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); descriptif.frame = CGRectMake(0, 30, self.view.frame.size.width, 80); // On met la vue au milieu splash_logo.frame = CGRectMake(0, 0, self.view.frame.size.width, 135); splash_logo.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2); ic_glass.frame = CGRectMake(0, 0,160,95); ic_glass.center = CGPointMake(splash_logo.center.x, ic_glass.center.y); ic_text_ociney.frame = CGRectMake(0, 95, 150, 40); ic_text_ociney.center = CGPointMake(splash_logo.center.x, ic_text_ociney.center.y); ic_drawer_film.frame = CGRectMake(0,self.view.frame.size.height - 100, 54, 54); ic_drawer_film.center = CGPointMake(self.view.center.x, ic_drawer_film.center.y); } #pragma mark - OCLoadMoviesTaskDelegate -(void)onMoviesListRecu:(OCLoadMoviesTask*)task moviesList:(NSArray*)moviesList{ [appDelegate lancerVueFilm:moviesList]; } -(void)onMoviesListResultatVide:(OCLoadMoviesTask*)task{ } -(void)erreurReseau:(AsyncTask*)task { } -(void)afficherChargement:(AsyncTask*)task afficher:(BOOL)afficher { } @end ================================================ FILE: ociney/en.lproj/InfoPlist.strings ================================================ /* Localized versions of Info.plist keys */ ================================================ FILE: ociney/libs/GTAppMenuController/GTAppMenuController.h ================================================ // // GTMainViewController.h // GTAppMenuController // // Created by Gianluca Tursi on 24/05/14. // Copyright (c) 2014 Gianluca Tursi. All rights reserved. // #import @interface GTAppMenuController : UINavigationController -(void)activateSwipeToOpenMenu:(BOOL)onlyNavigation; -(void)openAndCloseMenu; -(void)setAnimationDuration:(CGFloat)d; @end ================================================ FILE: ociney/libs/GTAppMenuController/GTAppMenuController.m ================================================ // // GTMainViewController.m // GTAppMenuController // // Created by Gianluca Tursi on 24/05/14. // Copyright (c) 2014 Gianluca Tursi. All rights reserved. // #import "GTAppMenuController.h" #import "OCAppDelegate.h" #define kHeaderHeight 60 @interface GTAppMenuController () @property (strong, nonatomic) OCAppDelegate *delegate; @property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) UIPanGestureRecognizer *panGesture; @end @implementation GTAppMenuController{ float firstX; float firstY; CGPoint _origin; CGPoint _final; CGFloat duration; } -(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; self.delegate = (OCAppDelegate *)[[UIApplication sharedApplication] delegate]; self.window = self.delegate.frontWindow; self.window.layer.shadowRadius = 5.0f; self.window.layer.shadowOffset = CGSizeMake(0,0); self.window.layer.shadowColor = [UIColor blackColor].CGColor; self.window.layer.shadowOpacity = .9f; duration = .3f; } -(void)activateSwipeToOpenMenu:(BOOL)onlyNavigation{ _panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(onPan:)]; if (onlyNavigation == YES) { [self.navigationBar addGestureRecognizer:_panGesture]; }else{ [self.window addGestureRecognizer:_panGesture]; } } -(void)openAndCloseMenu{ self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; CGPoint finalOrigin; CGRect f = self.window.frame; if (f.origin.y == CGPointZero.y) finalOrigin.y = CGRectGetHeight([UIScreen mainScreen].bounds) - kHeaderHeight; else finalOrigin.y = CGPointZero.y; finalOrigin.x = 0; f.origin = finalOrigin; [UIView animateWithDuration:.3 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ self.window.transform = CGAffineTransformIdentity; self.window.frame = f; } completion:^(BOOL finished) { }]; } -(void)setAnimationDuration:(CGFloat)d{ duration = d; } - (void)onPan:(UIPanGestureRecognizer *)pan { CGPoint translation = [pan translationInView:self.window]; CGPoint velocity = [pan velocityInView:self.window]; switch (pan.state) { case UIGestureRecognizerStateBegan: _origin = self.window.frame.origin; break; case UIGestureRecognizerStateChanged: if (_origin.y + translation.y >= 0){ if(self.window.frame.origin.y != CGPointZero.y) self.window.transform = CGAffineTransformMakeTranslation(0, translation.y); else self.window.transform = CGAffineTransformMakeTranslation(0, translation.y); } break; case UIGestureRecognizerStateEnded: case UIGestureRecognizerStateCancelled: { CGPoint finalOrigin = CGPointZero; if (velocity.y >= 0) { finalOrigin.y = CGRectGetHeight([UIScreen mainScreen].bounds) - kHeaderHeight; } CGRect f = self.window.frame; f.origin = finalOrigin; [UIView animateWithDuration:.3 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ self.window.transform = CGAffineTransformIdentity; self.window.frame = f; } completion:^(BOOL finished) { }]; } break; default: break; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end ================================================ FILE: ociney/libs/SliddingController/TTBlackTriangle.h ================================================ // // TTBlackTriangle.h // UIScrollSlidingPages // // Created by Thomas Thorpe on 16/04/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // #import @interface TTBlackTriangle : UIView - (id)initWithFrame:(CGRect)frame color:(UIColor *)sColor; @end ================================================ FILE: ociney/libs/SliddingController/TTBlackTriangle.m ================================================ // // TTBlackTriangle.m // UIScrollSlidingPages // // Created by Thomas Thorpe on 16/04/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // #import "TTBlackTriangle.h" @implementation TTBlackTriangle { UIColor * color; } - (id)initWithFrame:(CGRect)frame color:(UIColor *)sColor { color = sColor; self = [super initWithFrame:frame]; if (self) { [self setBackgroundColor:[UIColor clearColor]]; } return self; } - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self setBackgroundColor:[UIColor clearColor]]; } return self; } -(void)drawRect:(CGRect)rect { CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextClearRect(ctx, rect); CGContextBeginPath(ctx); CGContextMoveToPoint (ctx, CGRectGetMinX(rect), CGRectGetMinY(rect)); // top left CGContextAddLineToPoint(ctx, CGRectGetMaxX(rect), CGRectGetMinY(rect)); // top right CGContextAddLineToPoint(ctx, CGRectGetMidX(rect), CGRectGetMaxY(rect)); // mid bottom CGContextClosePath(ctx); CGContextSetFillColorWithColor(ctx, color.CGColor); CGContextFillPath(ctx); } @end ================================================ FILE: ociney/libs/SliddingController/TTScrollSlidingPagesController.h ================================================ // // TTSlidingPagesController.h // UIScrollViewSlidingPages // // Created by Thomas Thorpe on 27/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import #import "TTSlidingPagesDataSource.h" #import "TTSliddingPageDelegate.h" #import "OCAppDelegate.h" @class TTScrollViewWrapper; @interface TTScrollSlidingPagesController : UIViewController{ int currentPageBeforeRotation; bool viewDidLoadHasBeenCalled; bool viewDidAppearHasBeenCalled; UIPageControl *pageControl; TTScrollViewWrapper *topScrollViewWrapper; UIScrollView *bottomScrollView, *topScrollView; UILabel * skip; OCAppDelegate * appDelegate; } -(void)didRotate; /**Don't use anything above this. Feel free to use anything below!*/ -(void)reloadPages; -(void)scrollToPage:(int)page animated:(BOOL)animated; -(int)getCurrentDisplayedPage; -(int)getXPositionOfPage:(int)page; @property (nonatomic, weak) id dataSource; @property (nonatomic, weak) id delegate; /** @property titleScrollerHidden * @brief Whether the title scroller bar is hidden or not. * Whether the title scroller bar is hidden or not. Set this to YES if you only want the pages, and don't want the titles at the top of the page. For now even if this is set to YES you will still need to implement the `-(TTSlidingPageTitle *)titleForSlidingPagesViewController:(TTScrollSlidingPagesController *)source atIndex:(int)index` method in your datasource class, but you can just return nil for everything. Default is NO. **/ @property (nonatomic) bool titleScrollerHidden; /** @property titleScrollerHeight * @brief The height of the top scroller * The height of the top navigation scroller (the one with the header texts or images in). If not set, this will default to 50px. **/ @property (nonatomic) int titleScrollerHeight; /** @property titleScrollerItemWidth * @brief The width of each item in the top scroller * The width of each individual item in the top scroller. The wider it is, the less of the previous and next items you'll see, the narrower it is the more of the previous and next items you'll see but the more likely you won't have enough width for your title! Default if not set is 150px **/ @property (nonatomic) int titleScrollerItemWidth; /** @property titleScrollerBackgroundColour * @brief The background colour of the top scroller * The background colour of the top scroller. If you want it to be a texture image, you can use [UIColor colorWithPatternImage]. If not set, the default is a black diamonds pattern (credit: from http://subtlepatterns.com/ as long as you copy the diagmonds.png files within the Images folder in the same folder as this source). **/ @property (nonatomic, strong) UIColor *titleScrollerBackgroundColour; /** @property titleScrollerBackgroundColour * @brief The colour of the text in the top scroller * The colour of the text in the top scroller. If not set, the default will be white. **/ @property (nonatomic, strong) UIColor *titleScrollerTextColour; /** @property titleScrollerInActiveTextColour * @brief The colour of the inactive headings in the header area * The colour of the inactive text in the top scroller. If not set, the default will be white. **/ @property (nonatomic, strong) UIColor *titleScrollerInActiveTextColour; /** @property titleScrollerTextDropShadowColour * @brief The colour of the drop shadow for the heading text * The colour of the drop shadow for the heading text. If not set, the default will be black. **/ @property (nonatomic, strong) UIColor *titleScrollerTextDropShadowColour; /** @property titleScrollerTextFont * @brief The font for the text in the header area * The font for the text in the header area. If not set, the default will be the bold system font. **/ @property (nonatomic, strong) UIFont *titleScrollerTextFont; /** @property titleScrollerBottomEdgeColour * @brief The colour of the border on the bottom edge of the header area * The colour of the border on the bottom edge of the header area. If not set, the default will be transparent. **/ @property (nonatomic, strong) UIColor *titleScrollerBottomEdgeColour; /** @property titleScrollerBottomEdgeHeight * @brief The height of the border on the bottom edge of the header area * The height of the border on the bottom edge of the header area. If not set, the default will be 3. **/ @property (nonatomic) int titleScrollerBottomEdgeHeight; /** @property triangleBackgroundColour * @brief The colour of the triangle in the top scroller * The colour of the triangle in the top scroller. If not set, the default will be black. **/ @property (nonatomic, strong) UIColor *triangleBackgroundColour; /** @property disableTopScrollerShadow * @brief Disables the shadow effect on the top header scroller * If set to YES the shadow effect on the top header scroller will be disabled. Default is NO. **/ @property (nonatomic) BOOL disableTitleScrollerShadow; /** @property disableUIPageControl * @brief Disables the UIPageControl (the page dots) at the top of the screen * If set to YES the UIPageControl at the top of the screen will not be added. Default is NO. **/ @property (nonatomic) BOOL disableUIPageControl; /** @property initialPageNumber * @brief Sets the scroller to scroll to a specific page initially * Sets the scroller to scroll to a specific page initially (either on the first load, or afrer calling reloadPages). Default is 0. **/ @property (nonatomic) int initialPageNumber; /** @property pagingEnabled * @brief Whether the content view "snaps" to each page. Dont set this to NO if you implement widthForPageOnSlidingPagesViewController:atIndex in the delegate as it won't work properly! * Whether the content view "snaps" to each page (YES), or if the scroll is continous (NO). Default is YES. **/ @property (nonatomic) BOOL pagingEnabled; /** @property zoomOutAnimationDisabled * @brief Whether the "zoom out" effect that happens as you scroll from page to page should be disabled. Default is NO. * Whether the "zoom out" effect that happens as you scroll from page to page should be disabled. Default is NO **/ @property (nonatomic) bool zoomOutAnimationDisabled; /** @property hideStatusBarWhenScrolling * @brief Intended for use in iOS7+ and when the UIScrollSlidingPages control is full screen. The new behaviour of iOS7 can result in the status bar overlapping the top of the UIScrollSlidingPages. If you set this property to YES, the page dots at the top of the screen will be hidden until the user starts scrolling, at which point the status bar is replaced with the page number dots until the user stops scrolling. If you set this to YES, you also need to add the "UIViewControllerBasedStatusBarAppearance" key as a BOOLEAN in info.plist and set it to NO, the app will throw an exception to alert you of this if you don't. If you use this in anything less than iOS7 it won't make sense unless in your view hierarchy you make sure the status bar overlaps the TTScrollSlidingPagesController. So unless you do that, it's probably best to enable this property conditionally if the device is iOS7+ * Default is NO **/ @property (nonatomic) bool hideStatusBarWhenScrolling; @end ================================================ FILE: ociney/libs/SliddingController/TTScrollSlidingPagesController.m ================================================ // // TTSlidingPagesController.m // UIScrollViewSlidingPages // // Created by Thomas Thorpe on 27/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "TTScrollSlidingPagesController.h" #import "TTSlidingPage.h" #import "TTSlidingPageTitle.h" #import #import "TTBlackTriangle.h" #import "TTScrollViewWrapper.h" #import "Color+Hex.h" #import "Constantes.h" #import "OCAppDelegate.h" @interface TTScrollSlidingPagesController () @end @implementation TTScrollSlidingPagesController /** Initalises the control and sets all the default values for the user-settable properties. */ - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { viewDidLoadHasBeenCalled = NO; //set defaults self.titleScrollerHidden = NO; self.titleScrollerHeight = 50; self.titleScrollerItemWidth = 150; UIImage *backgroundImage = [UIImage imageNamed:@"diagmonds.png"]; if (backgroundImage != nil){ self.titleScrollerBackgroundColour = [UIColor colorWithPatternImage:backgroundImage]; } else { self.titleScrollerBackgroundColour = [UIColor blackColor]; } self.titleScrollerTextColour = [UIColor whiteColor]; self.titleScrollerInActiveTextColour = [UIColor whiteColor]; self.titleScrollerTextDropShadowColour = [UIColor blackColor]; self.titleScrollerTextFont = [UIFont boldSystemFontOfSize:19]; self.titleScrollerBottomEdgeHeight = 3; self.titleScrollerBottomEdgeColour = [UIColor clearColor]; self.triangleBackgroundColour = [UIColor blackColor]; self.disableTitleScrollerShadow = NO; self.disableUIPageControl = NO; self.initialPageNumber = 0; self.pagingEnabled = YES; self.zoomOutAnimationDisabled = NO; self.hideStatusBarWhenScrolling = NO; } return self; } /** Initialse the top and bottom scrollers (but don't populate them with pages yet) */ - (void)viewDidLoad { [super viewDidLoad]; viewDidLoadHasBeenCalled = YES; int nextYPosition = self.view.frame.size.height - 30; int pageDotsControlHeight = 0; appDelegate = ((OCAppDelegate*)[[UIApplication sharedApplication] delegate]); TTBlackTriangle *triangle; if (!self.titleScrollerHidden){ //add a triangle view to point to the currently selected page from the header int triangleWidth = 30; int triangleHeight = 10; triangle = [[TTBlackTriangle alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2-(triangleWidth/2), nextYPosition/*start at the top of the nextYPosition, but dont increment the yposition, so this means the triangle sits on top of the topscroller and cuts into it a bit*/, triangleWidth, triangleHeight) color:self.triangleBackgroundColour]; triangle.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; [self.view addSubview:triangle]; //set up the top scroller (for the nav titles to go in) - it is one frame wide, but has clipToBounds turned off to enable you to see the next and previous items in the scroller. We wrap it in an outer uiview so that the background colour can be set on that and span the entire view (because the width of the topScrollView is only one frame wide and centered). topScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.titleScrollerItemWidth, self.titleScrollerHeight)]; topScrollView.center = CGPointMake(self.view.center.x, topScrollView.center.y); //center it horizontally topScrollView.pagingEnabled = YES; topScrollView.clipsToBounds = NO; topScrollView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; topScrollView.showsVerticalScrollIndicator = NO; topScrollView.showsHorizontalScrollIndicator = NO; topScrollView.directionalLockEnabled = YES; topScrollView.backgroundColor = [UIColor clearColor]; topScrollView.pagingEnabled = self.pagingEnabled; topScrollView.delegate = self; //move the bottom scroller proportionally as you drag the top. topScrollViewWrapper = [[TTScrollViewWrapper alloc] initWithFrame:CGRectMake(0, nextYPosition, self.view.frame.size.width, self.titleScrollerHeight) andUIScrollView:topScrollView];//make the view to put the scroll view inside which will allow the background colour, and allow dragging from anywhere in this wrapper to be passed to the scrollview. topScrollViewWrapper.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; topScrollViewWrapper.backgroundColor = self.titleScrollerBackgroundColour; //pass touch events from the wrapper onto the scrollview (so you can drag from the entire width, as the scrollview itself only lives in the very centre, but with clipToBounds turned off) //single tap to switch to different item UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(topScrollViewTapped:)]; singleTap.numberOfTapsRequired = 1; singleTap.numberOfTouchesRequired = 1; [topScrollViewWrapper addGestureRecognizer: singleTap]; [topScrollViewWrapper addSubview:topScrollView];//put the top scroll view in the wrapper. [self.view addSubview:topScrollViewWrapper]; //put the wrapper in this view. nextYPosition += self.titleScrollerHeight; UIView *barView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(topScrollViewWrapper.frame) - self.titleScrollerBottomEdgeHeight, CGRectGetWidth(topScrollViewWrapper.frame), self.titleScrollerBottomEdgeHeight)]; barView.backgroundColor = self.titleScrollerBottomEdgeColour; [topScrollViewWrapper addSubview:barView]; [topScrollViewWrapper bringSubviewToFront:barView]; } //set up the bottom scroller (for the content to go in) bottomScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; bottomScrollView.pagingEnabled = self.pagingEnabled; bottomScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight; bottomScrollView.showsVerticalScrollIndicator = NO; bottomScrollView.showsHorizontalScrollIndicator = NO; bottomScrollView.directionalLockEnabled = YES; bottomScrollView.delegate = self; //move the top scroller proportionally as you drag the bottom. bottomScrollView.alwaysBounceVertical = NO; [self.view addSubview:bottomScrollView]; if (!self.disableUIPageControl){ //create and add the UIPageControl CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; int statusBarHeight = MIN(statusBarFrame.size.height, statusBarFrame.size.width); // the height of the status bar will be the smaller value. Can't guarantee it's the height property because if the app starts in landscape sometimes the height is actually the width property :| pageDotsControlHeight = statusBarHeight; pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, nextYPosition, self.view.frame.size.width, pageDotsControlHeight)]; pageControl.backgroundColor = [UIColor clearColor]; pageControl.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; [pageControl addTarget:self action:@selector(pageControlChangedPage:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:pageControl]; nextYPosition += pageDotsControlHeight; UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; //[button setTitleColor:[UIColor colorFromHexString:WHITE50] forState:UIControlStateNormal]; /* [button addTarget:self action:@selector(skip:) forControlEvents:UIControlEventTouchUpInside];*/ button.titleLabel.font =[UIFont fontWithName:@"Roboto-Black" size:12]; [button setTitle:NSLocalizedString(@"skip", nil) forState:UIControlStateNormal]; button.frame = CGRectMake(self.view.frame.size.width - 62, self.view.frame.size.height - 59, 55, 80); [self.view addSubview:button]; } //add the drop shadow on the top scroller (if enabled) and bring the view to the front if (!self.titleScrollerHidden && !self.disableTitleScrollerShadow){ topScrollViewWrapper.layer.masksToBounds = NO; topScrollViewWrapper.layer.shadowOffset = CGSizeMake(0, 4); topScrollViewWrapper.layer.shadowRadius = 4; topScrollViewWrapper.layer.shadowOpacity = 0.3; //Add shadow path (better performance) CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:topScrollViewWrapper.bounds].CGPath; [topScrollViewWrapper.layer setShadowPath:shadowPath]; //rasterize (also due to the better performance) topScrollViewWrapper.layer.shouldRasterize = YES; topScrollViewWrapper.layer.rasterizationScale = [UIScreen mainScreen].scale; [self.view bringSubviewToFront:topScrollViewWrapper];//bring view to sit on top so you can see the shadow! } if (triangle != nil){ [self.view bringSubviewToFront:triangle]; } if (self.hideStatusBarWhenScrolling){ //hide the page dots initially pageControl.alpha = 0; } } -(void)viewDidAppear:(BOOL)animated{ if (!viewDidAppearHasBeenCalled){ viewDidAppearHasBeenCalled = YES; [self reloadPages]; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /** Goes through the datasource and finds all the pages, then populates the topScrollView and bottomScrollView with all the pages and headers. It clears any of the views in both scrollViews first, so if you need to reload all the pages with new data from the dataSource for some reason, you can call this method. */ -(void)reloadPages{ if (self.dataSource == nil){ [NSException raise:@"TTSlidingPagesController data source missing" format:@"There was no data source set for the TTSlidingPagesControlller. You must set the .dataSource property on TTSlidingPagesController to an object instance that implements TTSlidingPagesDataSource, also make sure you do this before the view will be loaded (so before you add it as a subview to any other view that is about to appear)"]; } //remove any existing items from the subviews [topScrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; [bottomScrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; //remove any existing items from the view hierarchy for (UIViewController* subViewController in self.childViewControllers){ [subViewController willMoveToParentViewController:nil]; [subViewController removeFromParentViewController]; } //get the number of pages int numOfPages = [self.dataSource numberOfPagesForSlidingPagesViewController:self]; //keep track of where next to put items in each scroller int nextXPosition = 0; int nextTopScrollerXPosition = 0; //loop through each page and add it to the scroller for (int i=0; i)dataSource{ _dataSource = dataSource; // if (self.isViewLoaded){ // [self reloadPages]; // } } -(void)setPagingEnabled:(BOOL)pagingEnabled{ _pagingEnabled = pagingEnabled; if (bottomScrollView != nil){ bottomScrollView.pagingEnabled = pagingEnabled; } } #pragma mark Setters for properties to warn someone if they attempt to set a property after viewDidLoad has already been called (they won't work if so!) -(void)raiseErrorIfViewDidLoadHasBeenCalled{ if (viewDidLoadHasBeenCalled) { [NSException raise:@"TTSlidingPagesController set custom property too late" format:@"The app attempted to set one of the custom properties on TTSlidingPagesController (such as TitleScrollerHeight, TitleScrollerItemWidth etc.) after viewDidLoad has already been loaded. This won't work, you need to set the properties before viewDidLoad has been called - so before you access the .view property or set the dataSource. It is best to set the custom properties immediately after calling init on TTSlidingPagesController"]; } } -(void)setTitleScrollerHidden:(bool)titleScrollerHidden{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerHidden = titleScrollerHidden; } -(void)setTitleScrollerHeight:(int)titleScrollerHeight{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerHeight = titleScrollerHeight; } -(void)setTitleScrollerItemWidth:(int)titleScrollerItemWidth{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerItemWidth = titleScrollerItemWidth; } -(void)setTitleScrollerBackgroundColour:(UIColor *)titleScrollerBackgroundColour{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerBackgroundColour = titleScrollerBackgroundColour; } -(void)setTriangleBackgroundColour:(UIColor *)triangleBackgroundColour{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _triangleBackgroundColour = triangleBackgroundColour; } -(void)setTitleScrollerTextColour:(UIColor *)titleScrollerTextColour{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerTextColour = titleScrollerTextColour; } -(void)setTitleScrollerInActiveTextColour:(UIColor *)titleScrollerNonActiveTextColour{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerInActiveTextColour = titleScrollerNonActiveTextColour; } -(void)setTitleScrollerTextFont:(UIFont *)titleScrollerTextFont{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerTextFont = titleScrollerTextFont; } -(void)setTitleScrollerTextDropShadowColour:(UIColor *)titleScrollerTextDropShadowColour{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerTextDropShadowColour = titleScrollerTextDropShadowColour; } -(void)setTitleScrollerBottomEdgeColour:(UIColor *)titleScrollerBottomEdgeColour{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerBottomEdgeColour = titleScrollerBottomEdgeColour; } -(void)setDisableTitleScrollerShadow:(BOOL)disableTitleScrollerShadow{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _disableTitleScrollerShadow = disableTitleScrollerShadow; } -(void)setDisableUIPageControl:(BOOL)disableUIPageControl{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _disableUIPageControl = disableUIPageControl; } -(void)setHideStatusBarWhenScrolling:(bool)hideStatusBarWhenScrolling{ if (hideStatusBarWhenScrolling){ //check the info.plist required key has been set and throw an exception if not NSNumber *statusBarKey = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIViewControllerBasedStatusBarAppearance"]; if (statusBarKey == nil || [statusBarKey isEqualToNumber:@1 ]){ [NSException raise:@"TTScrollSlidingPagesController: Status Bar 'UIViewControllerBasedStatusBarAppearance' key missing from info.plist" format:@"The 'hideStarusBarWhenScrolling' property on the TTScrollSlidingPagesController is set to yes. This makes the page control (the page number dots) and the status bar share the same space at the top of the screen, and hide the status bar as the user changes pages. To do this, however you need to add the 'UIViewControllerBasedStatusBarAppearance' key to the info.plist and set it to a boolean of NO. See the instructions on github or the example project included with the control for help."]; } } //otherwise, set the value _hideStatusBarWhenScrolling = hideStatusBarWhenScrolling; if (hideStatusBarWhenScrolling){ //set the status bar style to light because the background it shares with the pagedots is black. You could do both of these in viewDidLoad, but doing it here just ensures that it still gets set if someone changed the property after viewDidLoad was called. [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; } } @end ================================================ FILE: ociney/libs/SliddingController/TTScrollViewWrapper.h ================================================ // // TTScrollViewWrapper.h // UIScrollSlidingPages // // Created by Thomas Thorpe on 20/04/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // #import @interface TTScrollViewWrapper : UIView{ UIScrollView *scrollView; } - (id)initWithFrame:(CGRect)frame andUIScrollView: (UIScrollView *)scroll; @end ================================================ FILE: ociney/libs/SliddingController/TTScrollViewWrapper.m ================================================ // // TTScrollViewWrapper.m // UIScrollSlidingPages // // The purpose of this class is purely to be a wrapper that you can put a UIScrollView inside, and it will pass all it's touch events to the UIScrollView. This is so you can turn the ClipToBounds property of the UIScrollView off (so that a paged scroller still shows items to the left and right such as in the topScroller title), but you can still drag anywhere along the ScrollViewWrapper, and the drag gets passed to the scrollView. // // Created by Thomas Thorpe on 20/04/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "TTScrollViewWrapper.h" @implementation TTScrollViewWrapper - (id)initWithFrame:(CGRect)frame andUIScrollView: (UIScrollView *)scroll { self = [super initWithFrame:frame]; if (self) { scrollView = scroll; } return self; } //This method means that when anything hits inside of this view, it will actually pass on the hit to scrollView instead. - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { if ([self pointInside:point withEvent:event]) { return scrollView; } return nil; } @end ================================================ FILE: ociney/libs/SliddingController/TTSliddingPageDelegate.h ================================================ // // TTSliddingPageDelegate.h // UIScrollSlidingPages // // Created by John Doran on 06/12/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2013 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import @protocol TTSliddingPageDelegate -(void)didScrollToViewAtIndex:(NSUInteger)index; @end ================================================ FILE: ociney/libs/SliddingController/TTSlidingPage.h ================================================ // // TTSlidingPage.h // UIScrollViewSlidingPages // // Created by Thomas Thorpe on 27/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import #import @interface TTSlidingPage : NSObject //if your view has a controller associated with it, you should use this initialiser and pass the view controller. This will make sure it gets retained and messages are passed to it correctly. -(id)initWithContentViewController:(UIViewController *)contentViewController; //if you use this method and just pass in a content view as a UIView, you must keep your own reference to the view controller, otherwise it might get deallocated and things will start going weird. Use this constructor at your own risk. -(id)initWithContentView:(UIView *)contentView; //the view controller for the content area. Preferbale to just setting a view @property(strong, nonatomic) UIViewController *contentViewController; //The view to go in the content area. You should only use this if you are keeping your own reference to the view controller. Use at your own risk. @property(strong, nonatomic) UIView *contentView; @end ================================================ FILE: ociney/libs/SliddingController/TTSlidingPage.m ================================================ // // TTSlidingPage.m // UIScrollViewSlidingPages // // Created by Thomas Thorpe on 27/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "TTSlidingPage.h" @implementation TTSlidingPage -(id)initWithContentViewController:(UIViewController *)contentViewController { self = [super init]; if(self) { self.contentViewController = contentViewController; } return (self); } -(id)initWithContentView:(UIView *)contentView { self = [super init]; if(self) { self.contentView = contentView; } return (self); } -(void)setContentViewController:(UIViewController *)contentViewController{ _contentViewController = contentViewController; if (contentViewController != nil){ self.contentView = contentViewController.view; } } @end ================================================ FILE: ociney/libs/SliddingController/TTSlidingPageTitle.h ================================================ // // TTSlidingPageTitle.h // UIScrollSlidingPages // // Created by Thomas Thorpe on 29/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import #import @interface TTSlidingPageTitle : NSObject -(id)initWithHeaderText:(NSString*)headerText; -(id)initWithHeaderImage:(UIImage*)headerImage; //The title text to go in the nav bar @property(strong, nonatomic) NSString *headerText; //An image to use in the nav bar (if you set this, the title text will not be used) @property(strong, nonatomic) UIImage *headerImage; @end ================================================ FILE: ociney/libs/SliddingController/TTSlidingPageTitle.m ================================================ // // TTSlidingPageTitle.m // UIScrollSlidingPages // // Created by Thomas Thorpe on 29/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "TTSlidingPageTitle.h" @implementation TTSlidingPageTitle -(id)initWithHeaderText:(NSString*)headerText{ self = [super init]; if(self) { self.headerText = headerText; } return (self); } -(id)initWithHeaderImage:(UIImage*)headerImage{ self = [super init]; if(self) { self.headerImage = headerImage; } return (self); } @end ================================================ FILE: ociney/libs/SliddingController/TTSlidingPagesDataSource.h ================================================ // // TTSlidingPagesDataSource.h // UIScrollViewSlidingPages // // Created by Thomas Thorpe on 27/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import @class TTScrollSlidingPagesController; @class TTSlidingPage; @class TTSlidingPageTitle; @protocol TTSlidingPagesDataSource -(int)numberOfPagesForSlidingPagesViewController:(TTScrollSlidingPagesController *)source; -(TTSlidingPage *)pageForSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index; -(TTSlidingPageTitle *)titleForSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index; @optional /** @method widthForPageOnSlidingPagesViewController:atIndex * @brief - This should NOT be used when paging is disabled. - An optional method to specify the width of one of your pages, if you don't want it to be the full width of the control. * This should NOT be used when paging is disabled - An optional method to specify the width of one of your pages, if you don't implement this method each page will just be the width of the TTScrollSlidingPagesController view.**/ -(int)widthForPageOnSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index; @end ================================================ FILE: ociney/libs/SliddingController/TTUIScrollViewSlidingPages.h ================================================ // // TTUIScrollViewSlidingPages.h // TomThorpe // // Created by Thomas Thorpe on 10/05/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "TTScrollSlidingPagesController.h" #import "TTSlidingPage.h" #import "TTSlidingPageTitle.h" ================================================ FILE: ociney/libs/Slider/TTBlackTriangle.h ================================================ // // TTBlackTriangle.h // UIScrollSlidingPages // // Created by Thomas Thorpe on 16/04/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // #import @interface TTBlackTriangle : UIView - (id)initWithFrame:(CGRect)frame color:(UIColor *)sColor; @end ================================================ FILE: ociney/libs/Slider/TTBlackTriangle.m ================================================ // // TTBlackTriangle.m // UIScrollSlidingPages // // Created by Thomas Thorpe on 16/04/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // #import "TTBlackTriangle.h" @implementation TTBlackTriangle { UIColor * color; } - (id)initWithFrame:(CGRect)frame color:(UIColor *)sColor { color = sColor; self = [super initWithFrame:frame]; if (self) { [self setBackgroundColor:[UIColor clearColor]]; } return self; } - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self setBackgroundColor:[UIColor clearColor]]; } return self; } -(void)drawRect:(CGRect)rect { CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextClearRect(ctx, rect); CGContextBeginPath(ctx); CGContextMoveToPoint (ctx, CGRectGetMinX(rect), CGRectGetMinY(rect)); // top left CGContextAddLineToPoint(ctx, CGRectGetMaxX(rect), CGRectGetMinY(rect)); // top right CGContextAddLineToPoint(ctx, CGRectGetMidX(rect), CGRectGetMaxY(rect)); // mid bottom CGContextClosePath(ctx); CGContextSetFillColorWithColor(ctx, color.CGColor); CGContextFillPath(ctx); } @end ================================================ FILE: ociney/libs/Slider/TTScrollSlidingPagesController.h ================================================ // // TTSlidingPagesController.h // UIScrollViewSlidingPages // // Created by Thomas Thorpe on 27/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import #import "TTSlidingPagesDataSource.h" #import "TTSliddingPageDelegate.h" #import "OCAppDelegate.h" @class TTScrollViewWrapper; @interface TTScrollSlidingPagesController : UIViewController{ int currentPageBeforeRotation; bool viewDidLoadHasBeenCalled; bool viewDidAppearHasBeenCalled; UIPageControl *pageControl; TTScrollViewWrapper *topScrollViewWrapper; UIScrollView *bottomScrollView, *topScrollView; UILabel * skip; OCAppDelegate * appDelegate; } -(void)didRotate; /**Don't use anything above this. Feel free to use anything below!*/ -(void)reloadPages; -(void)scrollToPage:(int)page animated:(BOOL)animated; -(int)getCurrentDisplayedPage; -(int)getXPositionOfPage:(int)page; @property (nonatomic, weak) id dataSource; @property (nonatomic, weak) id delegate; /** @property titleScrollerHidden * @brief Whether the title scroller bar is hidden or not. * Whether the title scroller bar is hidden or not. Set this to YES if you only want the pages, and don't want the titles at the top of the page. For now even if this is set to YES you will still need to implement the `-(TTSlidingPageTitle *)titleForSlidingPagesViewController:(TTScrollSlidingPagesController *)source atIndex:(int)index` method in your datasource class, but you can just return nil for everything. Default is NO. **/ @property (nonatomic) bool titleScrollerHidden; /** @property titleScrollerHeight * @brief The height of the top scroller * The height of the top navigation scroller (the one with the header texts or images in). If not set, this will default to 50px. **/ @property (nonatomic) int titleScrollerHeight; /** @property titleScrollerItemWidth * @brief The width of each item in the top scroller * The width of each individual item in the top scroller. The wider it is, the less of the previous and next items you'll see, the narrower it is the more of the previous and next items you'll see but the more likely you won't have enough width for your title! Default if not set is 150px **/ @property (nonatomic) int titleScrollerItemWidth; /** @property titleScrollerBackgroundColour * @brief The background colour of the top scroller * The background colour of the top scroller. If you want it to be a texture image, you can use [UIColor colorWithPatternImage]. If not set, the default is a black diamonds pattern (credit: from http://subtlepatterns.com/ as long as you copy the diagmonds.png files within the Images folder in the same folder as this source). **/ @property (nonatomic, strong) UIColor *titleScrollerBackgroundColour; /** @property titleScrollerBackgroundColour * @brief The colour of the text in the top scroller * The colour of the text in the top scroller. If not set, the default will be white. **/ @property (nonatomic, strong) UIColor *titleScrollerTextColour; /** @property titleScrollerInActiveTextColour * @brief The colour of the inactive headings in the header area * The colour of the inactive text in the top scroller. If not set, the default will be white. **/ @property (nonatomic, strong) UIColor *titleScrollerInActiveTextColour; /** @property titleScrollerTextDropShadowColour * @brief The colour of the drop shadow for the heading text * The colour of the drop shadow for the heading text. If not set, the default will be black. **/ @property (nonatomic, strong) UIColor *titleScrollerTextDropShadowColour; /** @property titleScrollerTextFont * @brief The font for the text in the header area * The font for the text in the header area. If not set, the default will be the bold system font. **/ @property (nonatomic, strong) UIFont *titleScrollerTextFont; /** @property titleScrollerBottomEdgeColour * @brief The colour of the border on the bottom edge of the header area * The colour of the border on the bottom edge of the header area. If not set, the default will be transparent. **/ @property (nonatomic, strong) UIColor *titleScrollerBottomEdgeColour; /** @property titleScrollerBottomEdgeHeight * @brief The height of the border on the bottom edge of the header area * The height of the border on the bottom edge of the header area. If not set, the default will be 3. **/ @property (nonatomic) int titleScrollerBottomEdgeHeight; /** @property triangleBackgroundColour * @brief The colour of the triangle in the top scroller * The colour of the triangle in the top scroller. If not set, the default will be black. **/ @property (nonatomic, strong) UIColor *triangleBackgroundColour; /** @property disableTopScrollerShadow * @brief Disables the shadow effect on the top header scroller * If set to YES the shadow effect on the top header scroller will be disabled. Default is NO. **/ @property (nonatomic) BOOL disableTitleScrollerShadow; /** @property disableUIPageControl * @brief Disables the UIPageControl (the page dots) at the top of the screen * If set to YES the UIPageControl at the top of the screen will not be added. Default is NO. **/ @property (nonatomic) BOOL disableUIPageControl; /** @property initialPageNumber * @brief Sets the scroller to scroll to a specific page initially * Sets the scroller to scroll to a specific page initially (either on the first load, or afrer calling reloadPages). Default is 0. **/ @property (nonatomic) int initialPageNumber; /** @property pagingEnabled * @brief Whether the content view "snaps" to each page. Dont set this to NO if you implement widthForPageOnSlidingPagesViewController:atIndex in the delegate as it won't work properly! * Whether the content view "snaps" to each page (YES), or if the scroll is continous (NO). Default is YES. **/ @property (nonatomic) BOOL pagingEnabled; /** @property zoomOutAnimationDisabled * @brief Whether the "zoom out" effect that happens as you scroll from page to page should be disabled. Default is NO. * Whether the "zoom out" effect that happens as you scroll from page to page should be disabled. Default is NO **/ @property (nonatomic) bool zoomOutAnimationDisabled; /** @property hideStatusBarWhenScrolling * @brief Intended for use in iOS7+ and when the UIScrollSlidingPages control is full screen. The new behaviour of iOS7 can result in the status bar overlapping the top of the UIScrollSlidingPages. If you set this property to YES, the page dots at the top of the screen will be hidden until the user starts scrolling, at which point the status bar is replaced with the page number dots until the user stops scrolling. If you set this to YES, you also need to add the "UIViewControllerBasedStatusBarAppearance" key as a BOOLEAN in info.plist and set it to NO, the app will throw an exception to alert you of this if you don't. If you use this in anything less than iOS7 it won't make sense unless in your view hierarchy you make sure the status bar overlaps the TTScrollSlidingPagesController. So unless you do that, it's probably best to enable this property conditionally if the device is iOS7+ * Default is NO **/ @property (nonatomic) bool hideStatusBarWhenScrolling; @end ================================================ FILE: ociney/libs/Slider/TTScrollSlidingPagesController.m ================================================ // // TTSlidingPagesController.m // UIScrollViewSlidingPages // // Created by Thomas Thorpe on 27/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "TTScrollSlidingPagesController.h" #import "TTSlidingPage.h" #import "TTSlidingPageTitle.h" #import #import "TTBlackTriangle.h" #import "TTScrollViewWrapper.h" #import "Color+Hex.h" #import "Constantes.h" #import "OCAppDelegate.h" @interface TTScrollSlidingPagesController () @end @implementation TTScrollSlidingPagesController /** Initalises the control and sets all the default values for the user-settable properties. */ - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { viewDidLoadHasBeenCalled = NO; //set defaults self.titleScrollerHidden = NO; self.titleScrollerHeight = 50; self.titleScrollerItemWidth = 150; UIImage *backgroundImage = [UIImage imageNamed:@"diagmonds.png"]; if (backgroundImage != nil){ self.titleScrollerBackgroundColour = [UIColor colorWithPatternImage:backgroundImage]; } else { self.titleScrollerBackgroundColour = [UIColor blackColor]; } self.titleScrollerTextColour = [UIColor whiteColor]; self.titleScrollerInActiveTextColour = [UIColor whiteColor]; self.titleScrollerTextDropShadowColour = [UIColor blackColor]; self.titleScrollerTextFont = [UIFont boldSystemFontOfSize:19]; self.titleScrollerBottomEdgeHeight = 3; self.titleScrollerBottomEdgeColour = [UIColor clearColor]; self.triangleBackgroundColour = [UIColor blackColor]; self.disableTitleScrollerShadow = NO; self.disableUIPageControl = NO; self.initialPageNumber = 0; self.pagingEnabled = YES; self.zoomOutAnimationDisabled = NO; self.hideStatusBarWhenScrolling = NO; } return self; } /** Initialse the top and bottom scrollers (but don't populate them with pages yet) */ - (void)viewDidLoad { [super viewDidLoad]; viewDidLoadHasBeenCalled = YES; int nextYPosition = self.view.frame.size.height - 30; int pageDotsControlHeight = 0; appDelegate = ((OCAppDelegate*)[[UIApplication sharedApplication] delegate]); TTBlackTriangle *triangle; if (!self.titleScrollerHidden){ //add a triangle view to point to the currently selected page from the header int triangleWidth = 30; int triangleHeight = 10; triangle = [[TTBlackTriangle alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2-(triangleWidth/2), nextYPosition/*start at the top of the nextYPosition, but dont increment the yposition, so this means the triangle sits on top of the topscroller and cuts into it a bit*/, triangleWidth, triangleHeight) color:self.triangleBackgroundColour]; triangle.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; [self.view addSubview:triangle]; //set up the top scroller (for the nav titles to go in) - it is one frame wide, but has clipToBounds turned off to enable you to see the next and previous items in the scroller. We wrap it in an outer uiview so that the background colour can be set on that and span the entire view (because the width of the topScrollView is only one frame wide and centered). topScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.titleScrollerItemWidth, self.titleScrollerHeight)]; topScrollView.center = CGPointMake(self.view.center.x, topScrollView.center.y); //center it horizontally topScrollView.pagingEnabled = YES; topScrollView.clipsToBounds = NO; topScrollView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; topScrollView.showsVerticalScrollIndicator = NO; topScrollView.showsHorizontalScrollIndicator = NO; topScrollView.directionalLockEnabled = YES; topScrollView.backgroundColor = [UIColor clearColor]; topScrollView.pagingEnabled = self.pagingEnabled; topScrollView.delegate = self; //move the bottom scroller proportionally as you drag the top. topScrollViewWrapper = [[TTScrollViewWrapper alloc] initWithFrame:CGRectMake(0, nextYPosition, self.view.frame.size.width, self.titleScrollerHeight) andUIScrollView:topScrollView];//make the view to put the scroll view inside which will allow the background colour, and allow dragging from anywhere in this wrapper to be passed to the scrollview. topScrollViewWrapper.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; topScrollViewWrapper.backgroundColor = self.titleScrollerBackgroundColour; //pass touch events from the wrapper onto the scrollview (so you can drag from the entire width, as the scrollview itself only lives in the very centre, but with clipToBounds turned off) //single tap to switch to different item UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(topScrollViewTapped:)]; singleTap.numberOfTapsRequired = 1; singleTap.numberOfTouchesRequired = 1; [topScrollViewWrapper addGestureRecognizer: singleTap]; [topScrollViewWrapper addSubview:topScrollView];//put the top scroll view in the wrapper. [self.view addSubview:topScrollViewWrapper]; //put the wrapper in this view. nextYPosition += self.titleScrollerHeight; UIView *barView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(topScrollViewWrapper.frame) - self.titleScrollerBottomEdgeHeight, CGRectGetWidth(topScrollViewWrapper.frame), self.titleScrollerBottomEdgeHeight)]; barView.backgroundColor = self.titleScrollerBottomEdgeColour; [topScrollViewWrapper addSubview:barView]; [topScrollViewWrapper bringSubviewToFront:barView]; } //set up the bottom scroller (for the content to go in) bottomScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; bottomScrollView.pagingEnabled = self.pagingEnabled; bottomScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight; bottomScrollView.showsVerticalScrollIndicator = NO; bottomScrollView.showsHorizontalScrollIndicator = NO; bottomScrollView.directionalLockEnabled = YES; bottomScrollView.delegate = self; //move the top scroller proportionally as you drag the bottom. bottomScrollView.alwaysBounceVertical = NO; [self.view addSubview:bottomScrollView]; if (!self.disableUIPageControl){ //create and add the UIPageControl CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; int statusBarHeight = MIN(statusBarFrame.size.height, statusBarFrame.size.width); // the height of the status bar will be the smaller value. Can't guarantee it's the height property because if the app starts in landscape sometimes the height is actually the width property :| pageDotsControlHeight = statusBarHeight; pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, nextYPosition, self.view.frame.size.width, pageDotsControlHeight)]; pageControl.backgroundColor = [UIColor clearColor]; pageControl.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; [pageControl addTarget:self action:@selector(pageControlChangedPage:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:pageControl]; nextYPosition += pageDotsControlHeight; UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button setTitleColor:[UIColor colorFromHexString:WHITE50] forState:UIControlStateNormal]; [button addTarget:self action:@selector(skip:) forControlEvents:UIControlEventTouchUpInside]; button.titleLabel.font =[UIFont fontWithName:@"Roboto-Black" size:12]; [button setTitle:NSLocalizedString(@"skip", nil) forState:UIControlStateNormal]; button.frame = CGRectMake(self.view.frame.size.width - 62, self.view.frame.size.height - 59, 55, 80); [self.view addSubview:button]; } //add the drop shadow on the top scroller (if enabled) and bring the view to the front if (!self.titleScrollerHidden && !self.disableTitleScrollerShadow){ topScrollViewWrapper.layer.masksToBounds = NO; topScrollViewWrapper.layer.shadowOffset = CGSizeMake(0, 4); topScrollViewWrapper.layer.shadowRadius = 4; topScrollViewWrapper.layer.shadowOpacity = 0.3; //Add shadow path (better performance) CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:topScrollViewWrapper.bounds].CGPath; [topScrollViewWrapper.layer setShadowPath:shadowPath]; //rasterize (also due to the better performance) topScrollViewWrapper.layer.shouldRasterize = YES; topScrollViewWrapper.layer.rasterizationScale = [UIScreen mainScreen].scale; [self.view bringSubviewToFront:topScrollViewWrapper];//bring view to sit on top so you can see the shadow! } if (triangle != nil){ [self.view bringSubviewToFront:triangle]; } if (self.hideStatusBarWhenScrolling){ //hide the page dots initially pageControl.alpha = 0; } } -(void)viewDidAppear:(BOOL)animated{ if (!viewDidAppearHasBeenCalled){ viewDidAppearHasBeenCalled = YES; [self reloadPages]; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /** Goes through the datasource and finds all the pages, then populates the topScrollView and bottomScrollView with all the pages and headers. It clears any of the views in both scrollViews first, so if you need to reload all the pages with new data from the dataSource for some reason, you can call this method. */ -(void)reloadPages{ if (self.dataSource == nil){ [NSException raise:@"TTSlidingPagesController data source missing" format:@"There was no data source set for the TTSlidingPagesControlller. You must set the .dataSource property on TTSlidingPagesController to an object instance that implements TTSlidingPagesDataSource, also make sure you do this before the view will be loaded (so before you add it as a subview to any other view that is about to appear)"]; } //remove any existing items from the subviews [topScrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; [bottomScrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; //remove any existing items from the view hierarchy for (UIViewController* subViewController in self.childViewControllers){ [subViewController willMoveToParentViewController:nil]; [subViewController removeFromParentViewController]; } //get the number of pages int numOfPages = [self.dataSource numberOfPagesForSlidingPagesViewController:self]; //keep track of where next to put items in each scroller int nextXPosition = 0; int nextTopScrollerXPosition = 0; //loop through each page and add it to the scroller for (int i=0; i)dataSource{ _dataSource = dataSource; // if (self.isViewLoaded){ // [self reloadPages]; // } } -(void)setPagingEnabled:(BOOL)pagingEnabled{ _pagingEnabled = pagingEnabled; if (bottomScrollView != nil){ bottomScrollView.pagingEnabled = pagingEnabled; } } #pragma mark Setters for properties to warn someone if they attempt to set a property after viewDidLoad has already been called (they won't work if so!) -(void)raiseErrorIfViewDidLoadHasBeenCalled{ if (viewDidLoadHasBeenCalled) { [NSException raise:@"TTSlidingPagesController set custom property too late" format:@"The app attempted to set one of the custom properties on TTSlidingPagesController (such as TitleScrollerHeight, TitleScrollerItemWidth etc.) after viewDidLoad has already been loaded. This won't work, you need to set the properties before viewDidLoad has been called - so before you access the .view property or set the dataSource. It is best to set the custom properties immediately after calling init on TTSlidingPagesController"]; } } -(void)setTitleScrollerHidden:(bool)titleScrollerHidden{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerHidden = titleScrollerHidden; } -(void)setTitleScrollerHeight:(int)titleScrollerHeight{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerHeight = titleScrollerHeight; } -(void)setTitleScrollerItemWidth:(int)titleScrollerItemWidth{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerItemWidth = titleScrollerItemWidth; } -(void)setTitleScrollerBackgroundColour:(UIColor *)titleScrollerBackgroundColour{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerBackgroundColour = titleScrollerBackgroundColour; } -(void)setTriangleBackgroundColour:(UIColor *)triangleBackgroundColour{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _triangleBackgroundColour = triangleBackgroundColour; } -(void)setTitleScrollerTextColour:(UIColor *)titleScrollerTextColour{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerTextColour = titleScrollerTextColour; } -(void)setTitleScrollerInActiveTextColour:(UIColor *)titleScrollerNonActiveTextColour{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerInActiveTextColour = titleScrollerNonActiveTextColour; } -(void)setTitleScrollerTextFont:(UIFont *)titleScrollerTextFont{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerTextFont = titleScrollerTextFont; } -(void)setTitleScrollerTextDropShadowColour:(UIColor *)titleScrollerTextDropShadowColour{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerTextDropShadowColour = titleScrollerTextDropShadowColour; } -(void)setTitleScrollerBottomEdgeColour:(UIColor *)titleScrollerBottomEdgeColour{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _titleScrollerBottomEdgeColour = titleScrollerBottomEdgeColour; } -(void)setDisableTitleScrollerShadow:(BOOL)disableTitleScrollerShadow{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _disableTitleScrollerShadow = disableTitleScrollerShadow; } -(void)setDisableUIPageControl:(BOOL)disableUIPageControl{ [self raiseErrorIfViewDidLoadHasBeenCalled]; _disableUIPageControl = disableUIPageControl; } -(void)setHideStatusBarWhenScrolling:(bool)hideStatusBarWhenScrolling{ if (hideStatusBarWhenScrolling){ //check the info.plist required key has been set and throw an exception if not NSNumber *statusBarKey = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIViewControllerBasedStatusBarAppearance"]; if (statusBarKey == nil || [statusBarKey isEqualToNumber:@1 ]){ [NSException raise:@"TTScrollSlidingPagesController: Status Bar 'UIViewControllerBasedStatusBarAppearance' key missing from info.plist" format:@"The 'hideStarusBarWhenScrolling' property on the TTScrollSlidingPagesController is set to yes. This makes the page control (the page number dots) and the status bar share the same space at the top of the screen, and hide the status bar as the user changes pages. To do this, however you need to add the 'UIViewControllerBasedStatusBarAppearance' key to the info.plist and set it to a boolean of NO. See the instructions on github or the example project included with the control for help."]; } } //otherwise, set the value _hideStatusBarWhenScrolling = hideStatusBarWhenScrolling; if (hideStatusBarWhenScrolling){ //set the status bar style to light because the background it shares with the pagedots is black. You could do both of these in viewDidLoad, but doing it here just ensures that it still gets set if someone changed the property after viewDidLoad was called. [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; } } -(void)skip:(id)sender { //[appDelegate lancerConnexion]; } @end ================================================ FILE: ociney/libs/Slider/TTScrollViewWrapper.h ================================================ // // TTScrollViewWrapper.h // UIScrollSlidingPages // // Created by Thomas Thorpe on 20/04/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // #import @interface TTScrollViewWrapper : UIView{ UIScrollView *scrollView; } - (id)initWithFrame:(CGRect)frame andUIScrollView: (UIScrollView *)scroll; @end ================================================ FILE: ociney/libs/Slider/TTScrollViewWrapper.m ================================================ // // TTScrollViewWrapper.m // UIScrollSlidingPages // // The purpose of this class is purely to be a wrapper that you can put a UIScrollView inside, and it will pass all it's touch events to the UIScrollView. This is so you can turn the ClipToBounds property of the UIScrollView off (so that a paged scroller still shows items to the left and right such as in the topScroller title), but you can still drag anywhere along the ScrollViewWrapper, and the drag gets passed to the scrollView. // // Created by Thomas Thorpe on 20/04/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "TTScrollViewWrapper.h" @implementation TTScrollViewWrapper - (id)initWithFrame:(CGRect)frame andUIScrollView: (UIScrollView *)scroll { self = [super initWithFrame:frame]; if (self) { scrollView = scroll; } return self; } //This method means that when anything hits inside of this view, it will actually pass on the hit to scrollView instead. - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { if ([self pointInside:point withEvent:event]) { return scrollView; } return nil; } @end ================================================ FILE: ociney/libs/Slider/TTSliddingPageDelegate.h ================================================ // // TTSliddingPageDelegate.h // UIScrollSlidingPages // // Created by John Doran on 06/12/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2013 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import @protocol TTSliddingPageDelegate -(void)didScrollToViewAtIndex:(NSUInteger)index; @end ================================================ FILE: ociney/libs/Slider/TTSlidingPage.h ================================================ // // TTSlidingPage.h // UIScrollViewSlidingPages // // Created by Thomas Thorpe on 27/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import #import @interface TTSlidingPage : NSObject //if your view has a controller associated with it, you should use this initialiser and pass the view controller. This will make sure it gets retained and messages are passed to it correctly. -(id)initWithContentViewController:(UIViewController *)contentViewController; //if you use this method and just pass in a content view as a UIView, you must keep your own reference to the view controller, otherwise it might get deallocated and things will start going weird. Use this constructor at your own risk. -(id)initWithContentView:(UIView *)contentView; //the view controller for the content area. Preferbale to just setting a view @property(strong, nonatomic) UIViewController *contentViewController; //The view to go in the content area. You should only use this if you are keeping your own reference to the view controller. Use at your own risk. @property(strong, nonatomic) UIView *contentView; @end ================================================ FILE: ociney/libs/Slider/TTSlidingPage.m ================================================ // // TTSlidingPage.m // UIScrollViewSlidingPages // // Created by Thomas Thorpe on 27/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "TTSlidingPage.h" @implementation TTSlidingPage -(id)initWithContentViewController:(UIViewController *)contentViewController { self = [super init]; if(self) { self.contentViewController = contentViewController; } return (self); } -(id)initWithContentView:(UIView *)contentView { self = [super init]; if(self) { self.contentView = contentView; } return (self); } -(void)setContentViewController:(UIViewController *)contentViewController{ _contentViewController = contentViewController; if (contentViewController != nil){ self.contentView = contentViewController.view; } } @end ================================================ FILE: ociney/libs/Slider/TTSlidingPageTitle.h ================================================ // // TTSlidingPageTitle.h // UIScrollSlidingPages // // Created by Thomas Thorpe on 29/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import #import @interface TTSlidingPageTitle : NSObject -(id)initWithHeaderText:(NSString*)headerText; -(id)initWithHeaderImage:(UIImage*)headerImage; //The title text to go in the nav bar @property(strong, nonatomic) NSString *headerText; //An image to use in the nav bar (if you set this, the title text will not be used) @property(strong, nonatomic) UIImage *headerImage; @end ================================================ FILE: ociney/libs/Slider/TTSlidingPageTitle.m ================================================ // // TTSlidingPageTitle.m // UIScrollSlidingPages // // Created by Thomas Thorpe on 29/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "TTSlidingPageTitle.h" @implementation TTSlidingPageTitle -(id)initWithHeaderText:(NSString*)headerText{ self = [super init]; if(self) { self.headerText = headerText; } return (self); } -(id)initWithHeaderImage:(UIImage*)headerImage{ self = [super init]; if(self) { self.headerImage = headerImage; } return (self); } @end ================================================ FILE: ociney/libs/Slider/TTSlidingPagesDataSource.h ================================================ // // TTSlidingPagesDataSource.h // UIScrollViewSlidingPages // // Created by Thomas Thorpe on 27/03/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import @class TTScrollSlidingPagesController; @class TTSlidingPage; @class TTSlidingPageTitle; @protocol TTSlidingPagesDataSource -(int)numberOfPagesForSlidingPagesViewController:(TTScrollSlidingPagesController *)source; -(TTSlidingPage *)pageForSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index; -(TTSlidingPageTitle *)titleForSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index; @optional /** @method widthForPageOnSlidingPagesViewController:atIndex * @brief - This should NOT be used when paging is disabled. - An optional method to specify the width of one of your pages, if you don't want it to be the full width of the control. * This should NOT be used when paging is disabled - An optional method to specify the width of one of your pages, if you don't implement this method each page will just be the width of the TTScrollSlidingPagesController view.**/ -(int)widthForPageOnSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index; @end ================================================ FILE: ociney/libs/Slider/TTUIScrollViewSlidingPages.h ================================================ // // TTUIScrollViewSlidingPages.h // TomThorpe // // Created by Thomas Thorpe on 10/05/2013. // Copyright (c) 2013 Thomas Thorpe. All rights reserved. // /* Copyright (c) 2012 Tom Thorpe. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "TTScrollSlidingPagesController.h" #import "TTSlidingPage.h" #import "TTSlidingPageTitle.h" ================================================ FILE: ociney/main.m ================================================ // // main.m // ociney // // Created by Florent Champigny on 21/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "OCAppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([OCAppDelegate class])); } } ================================================ FILE: ociney/ociney-Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleDisplayName ${PRODUCT_NAME} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier com.bdc.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString 1.1 CFBundleSignature ???? CFBundleVersion 1.1 Fabric APIKey 29cbd600bb8183011201895a931db91e93f2d614 Kits KitInfo KitName Crashlytics LSRequiresIPhoneOS NSLocationAlwaysUsageDescription Location is required to find out where you are NSLocationWhenInUseUsageDescription Location is required to find out where you are UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIViewControllerBasedStatusBarAppearance ================================================ FILE: ociney/ociney-Prefix.pch ================================================ // // Prefix header // // The contents of this file are implicitly included at the beginning of every source file. // #import #ifndef __IPHONE_5_0 #warning "This project uses features only available in iOS SDK 5.0 and later." #endif #ifdef __OBJC__ #import #import #endif ================================================ FILE: ociney/res/Base.lproj/Localizable.strings ================================================ "date_naissance"="Date de naissance :"; "lieu_naissance"="Lieu de naissance :"; "activites"="Activités :"; ================================================ FILE: ociney/src/Controller/FeedSmall.h ================================================ // // FeedSmall.h // ociney // // Created by Kevin De Jesus Ferreira on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import #import "JSONModel.h" #import "ModelObject.h" #import "Movie.h" #import "TheaterShowtime.h" #import "Theater.h" #import "Review.h" #import "Media.h" #import "Protocole.h" @interface FeedSmall : JSONModel @property (strong, nonatomic) NSString* updated; @property (assign, nonatomic) int page; @property (assign, nonatomic) int count; @property (assign, nonatomic) int totalResults; @property (strong, nonatomic) NSArray * results; @property (strong, nonatomic) NSArray * movie; @property (strong, nonatomic) NSArray * theaterShowtimes; @property (strong, nonatomic) NSArray * theater; @property (strong, nonatomic) NSArray * review; @property (strong, nonatomic) NSArray * media; @property (strong, nonatomic) NSArray* person; @end ================================================ FILE: ociney/src/Controller/FeedSmall.m ================================================ // // FeedSmall.m // ociney // // Created by Kevin De Jesus Ferreira on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import "FeedSmall.h" @implementation FeedSmall +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Controller/LeftViewController.h ================================================ // // LeftViewController.h // ociney // // Created by Kevin De Jesus Ferreira on 24/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import @interface LeftViewController : UIViewController @property (strong,nonatomic) UIView * content; @property (strong,nonatomic) UIView * gradientView; @property (strong,nonatomic) CAGradientLayer * gradient; @end ================================================ FILE: ociney/src/Controller/LeftViewController.m ================================================ // // LeftViewController.m // ociney // // Created by Kevin De Jesus Ferreira on 24/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "LeftViewController.h" #import "Color+Hex.h" #import "OCAppDelegate.h" #import "Constantes.h" @interface LeftViewController (){ OCAppDelegate * appDelegate; NSInteger tagSelectionner; BOOL first; UIButton * films; UIButton * stars; UIButton * salles; UIButton * credits; UIButton * favoris; int buttonY; } @end #define HEIGHT_BUTTON 45.0 #define FONT_SIZE_BUTTON 19 #define FONT_NORMAL THIN #define FONT_SELECTED BOLD @implementation LeftViewController - (void)viewDidLoad { [super viewDidLoad]; buttonY = 5; appDelegate = (OCAppDelegate *)[[UIApplication sharedApplication] delegate]; [self charger]; first = YES; } -(void) viewWillAppear:(BOOL)animated{ //[appDelegate activeFond:YES andColor:[UIColor colorFromHexString:BLACK_70]]; if(first){ [self remplirVue]; [self itemSelectionner:films]; } else [self updateVue]; } -(void) charger{ tagSelectionner = FILMS_MENU; } -(void) remplirVue{ first = false; self.content = [[UIView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)]; { self.gradientView = [[UIView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, self.content.frame.size.width,self.content.frame.size.height)]; [self.content addSubview:self.gradientView]; self.gradient = [CAGradientLayer layer]; self.gradient.colors = @[(id) [[UIColor colorFromHexString:@"#333333ff"] CGColor], (id) [[UIColor colorFromHexString:@"#555555ff"] CGColor]]; [self.gradientView.layer insertSublayer:self.gradient atIndex:0]; self.gradient.frame = self.gradientView.bounds; } { films = [self createButton:@"Films" andImage:@"ic_drawer_films.png" andTag:FILMS_MENU]; } { salles = [self createButton:@"Salles" andImage:@"ic_drawer_salles.png" andTag:SALLES_MENU]; } { stars = [self createButton:@"Stars" andImage:@"ic_drawer_stars.png" andTag:STARTS_MENU]; } /* { favoris = [self createButton:@"Favoris" andImage:@"ic_drawer_favoris.png" andTag:FAVORIS_MENU]; } */ { credits = [self createButton:@"Crédits" andImage:@"ic_drawer_credits.png" andTag:CREDITS_MENU]; } [self.view addSubview:self.content]; } -(UIButton *) createButton:(NSString *)textLabel andImage:(NSString*)imageName andTag:(int)tag { UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; // Permet d'ajouter des actions en fonction des états du bouton [button addTarget:self action:@selector(changeColor:) forControlEvents:UIControlEventTouchDown]; [button addTarget:self action:@selector(changeClearColor:) forControlEvents:UIControlEventTouchCancel]; [button addTarget:self action:@selector(lancerItemMenu:) forControlEvents:UIControlEventTouchUpInside]; [button addTarget:self action:@selector(changeClearColor:) forControlEvents:UIControlEventTouchUpOutside]; [button setTitle:textLabel forState:UIControlStateNormal]; button.frame = CGRectMake(0,buttonY, self.view.bounds.size.width, HEIGHT_BUTTON); button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; // Permet de changer la couleur du texte en fonction du touch [button setTitleColor:[UIColor colorFromHexString:WHITE95] forState:UIControlStateNormal]; [button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; // Permet de mettre du padding à gauche [button.titleLabel setFont:[UIFont fontWithName:FONT_NORMAL size:19]]; [button setTitleColor:[UIColor colorFromHexString:WHITE95] forState:UIControlStateNormal]; button.titleLabel.center = CGPointMake(button.titleLabel.center.x, button.frame.size.height/2); [button setTitleEdgeInsets:UIEdgeInsetsMake(0.0, 60.0, 0.0, 0.0)]; // Permet de changer la couleur de fond [button setBackgroundColor:[UIColor clearColor]]; UIImageView *image = [[UIImageView alloc]initWithFrame:CGRectMake(10,0, 30, 30)]; image.center = CGPointMake(image.center.x, button.frame.size.height/2); image.image = [UIImage imageNamed:imageName]; image.contentMode = UIViewContentModeScaleAspectFit; [button addSubview:image]; button.tag = tag; buttonY += (HEIGHT_BUTTON+3); [self.content addSubview:button]; return button; } -(void)updateVue{ [self resetAllItems]; [self itemSelectionner:[self sendByTag:tagSelectionner]]; } -(UIButton *)sendByTag:(NSInteger)tag{ switch (tag) { case FILMS_MENU: return films; case STARTS_MENU: return stars; case SALLES_MENU: return salles; case CREDITS_MENU: return credits; case FAVORIS_MENU: return favoris; } return nil; } - (IBAction)changeClearColor:(UIButton *)sender { tagSelectionner = (NSInteger)[sender tag]; [sender setBackgroundColor:[UIColor clearColor]]; } - (IBAction)changeColor:(UIButton *)sender{ //[sender setBackgroundColor:[UIColor colorFromHexString:GRAY_CELL]]; } -(IBAction)lancerItemMenu:(UIButton *)sender{ [self changeClearColor:sender]; [self resetAllItems]; [self itemSelectionner:sender]; [appDelegate toggleLeftDrawer]; [appDelegate changeTopViewController:[sender tag]]; } -(void) resetAllItems { UIFont *font = [UIFont fontWithName:FONT_NORMAL size:FONT_SIZE_BUTTON]; UIColor *color = [UIColor colorFromHexString:WHITE95]; [films.titleLabel setFont:font]; [films setTitleColor:color forState:UIControlStateNormal]; [stars.titleLabel setFont:font]; [stars setTitleColor:color forState:UIControlStateNormal]; [salles.titleLabel setFont:font]; [salles setTitleColor:color forState:UIControlStateNormal]; [favoris.titleLabel setFont:font]; [favoris setTitleColor:color forState:UIControlStateNormal]; [credits.titleLabel setFont:font]; [credits setTitleColor:color forState:UIControlStateNormal]; } -(void) itemSelectionner:(UIButton *)sender{ /* switch (sender.tag) { case FILMS_MENU: { [sender.titleLabel setFont:[UIFont fontWithName:FONT_SELECTED size:FONT_SIZE_BUTTON]]; } break; case STARTS_MENU: { } break; } [sender setTitleColor:[UIColor colorFromHexString:WHITE95] forState:UIControlStateNormal]; */ [sender.titleLabel setFont:[UIFont fontWithName:FONT_SELECTED size:FONT_SIZE_BUTTON]]; } @end ================================================ FILE: ociney/src/Controller/ListSallesController.h ================================================ // // ListSallesController.h // ociney // // Created by Kevin De Jesus Ferreira on 29/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "OCListViewController.h" #import "OCLoadTheatersTask.h" #import #import "OCEmptyViewGPS.h" @interface ListSallesController : OCListViewController @property (strong, nonatomic) OCLoadTheatersTask *task; @property (strong,nonatomic) CLLocationManager *locationManager; @property (strong,nonatomic) NSArray * salleDepart; @property (strong,nonatomic) OCEmptyViewGPS * empty_gps; @end ================================================ FILE: ociney/src/Controller/ListSallesController.m ================================================ // // ListSallesController.m // ociney // // Created by Kevin De Jesus Ferreira on 29/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "ListSallesController.h" #import "OCAppDelegate.h" #import "SalleCell.h" #import "RechercheTaskTheater.h" #import "Color+Hex.h" #import "Constantes.h" #import "OCTheaterDetailController.h" #import "AnalyticsKit.h" #define IDENTIFIER_SALLE @"salles" #import @interface ListSallesController () @end @implementation ListSallesController - (void)viewDidLoad { [super viewDidLoad]; [AnalyticsKit logScreen:@"ListSalles"]; self.titleView = @"Salles"; self.appDelegate.placeholderSearch = @"Rechercher une salle"; self.appDelegate.task = [[RechercheTaskTheater alloc]initWithDelegate:self]; self.appDelegate.task.cancelDelegate = self; self.empty_gps = [[OCEmptyViewGPS alloc]initWithFrame:CGRectZero]; self.empty_gps.hidden = YES; [self.view addSubview:self.empty_gps]; if ([CLLocationManager locationServicesEnabled]) { self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.distanceFilter = kCLDistanceFilterNone; self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; self.locationManager.delegate = self; if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { //[self.locationManager requestWhenInUseAuthorization]; [self.locationManager requestAlwaysAuthorization]; } [self.locationManager startUpdatingLocation]; }else{ NSLog(@"GPS PAS ACTIVE"); } } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [[self navigationController] setNavigationBarHidden:NO animated:YES]; self.navigationController.navigationBar.opaque = YES; self.navigationController.navigationBar.translucent = NO; self.navigationItem.hidesBackButton = YES; self.navigationController.navigationBar.barTintColor = [UIColor blackColor]; self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}]; self.empty_gps.frame = self.view.bounds; [self.empty_gps positionner]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:IDENTIFIER_SALLE]; if(cell == nil){ [tableView registerNib:[UINib nibWithNibName:@"SalleCell" bundle:nil] forCellReuseIdentifier:IDENTIFIER_SALLE]; cell = [tableView dequeueReusableCellWithIdentifier:IDENTIFIER_SALLE]; [cell awakeFromNib]; } cell.contentView.frame = CGRectMake(cell.contentView.frame.origin.x, cell.contentView.frame.origin.y, self.tableView.frame.size.width, cell.contentView.frame.size.height); cell.selectionStyle = UITableViewCellSelectionStyleNone; return cell; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return SALLE_CELL_HEIGHT; } - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath: (NSIndexPath *)indexPath{ SalleCell *s = (SalleCell*)cell; [s chargerAvecSalle:self.array[indexPath.row]]; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [super onClick]; OCTheaterDetailController *controller = [[OCTheaterDetailController alloc] init]; UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath]; controller.viewCinema = [[UIImageView alloc]initWithImage:[ListSallesController imageWithView:[cell contentView]]]; controller.cinema = [self.array objectAtIndex:indexPath.row]; [self.navigationController pushViewController:controller animated:YES]; } + (UIImage *) imageWithView:(UIView *)view { UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0); [view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage * img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return img; } -(void) locationManager: (CLLocationManager *)manager didUpdateToLocation: (CLLocation *) newLocation fromLocation: (CLLocation *) oldLocation{ } - (void) locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ [self afficherEmptyView:YES]; self.empty_gps.hidden = NO; [self.locationManager stopUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ if(locations.count > 0){ self.locationManager.delegate = nil; [self.locationManager stopUpdatingLocation]; self.empty_gps.hidden = YES; CLLocation* loc = locations[0]; OCAppDelegate* app = (OCAppDelegate*)[UIApplication sharedApplication].delegate; app.myLocationGPS =loc; NSString *lat = [NSString stringWithFormat:@"%f",loc.coordinate.latitude]; NSString *longitude = [NSString stringWithFormat:@"%f",loc.coordinate.longitude]; if(DEBUG){ lat = @"48.85568"; longitude = @"2.339401"; } self.task = [[OCLoadTheatersTask alloc]initWithDelegate:self]; [self.task execute:@[lat,longitude]]; } } #pragma mark - OCLoadTheatersTaskDelegate -(void)onTheatersListRecu:(OCLoadTheatersTask*)task theatherList:(NSArray *)theatherList{ [self afficherEmptyView:NO]; [self.array addObjectsFromArray:theatherList]; self.salleDepart = [self.array copy]; [self.tableView reloadData]; } -(void)onTheatersListResultatVide:(OCLoadTheatersTask*)task{ if(self.page == 1){ [self afficherEmptyView:YES]; } } -(void)erreurReseau:(AsyncTask*)task { } -(void)afficherChargement:(AsyncTask*)task afficher:(BOOL)afficher { [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:afficher]; } #pragma mark - CancelSearchDelegate -(void)onCancelSearch{ if([self.salleDepart count] != 0){ [self afficherEmptyView:NO]; } self.loadMore = YES; self.page = 1; self.searchOn = NO; [self.array removeAllObjects]; [self.array addObjectsFromArray:self.salleDepart]; self.task = [[OCLoadTheatersTask alloc]initWithDelegate:self]; [self.task execute:@[@"47.346699",@"1.294519"]]; } #pragma mark - RechercheTaskTheaterDelegate -(void)onRechercheTheaterRecu:(RechercheTaskTheater*)task theaters:(NSArray *)listCinemas{ [self afficherEmptyView:NO]; self.empty_gps.hidden = YES; if(!self.searchOn){ self.page = 1; self.loadMore = YES; [self.array removeAllObjects]; } self.searchOn = YES; [self.array addObjectsFromArray:listCinemas]; [self.tableView reloadData]; } -(void)onRechercheTheaterVide:(RechercheTaskTheater*)task{ if(self.page == 1){ [self afficherEmptyView:YES]; self.empty_gps.hidden = NO; } } @end ================================================ FILE: ociney/src/Controller/MovieDetailController.h ================================================ // // MovieDetailController.h // ociney // // Created by Kevin De Jesus Ferreira on 01/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "GTAppMenuController.h" #import "Movie.h" #import "HeaderMovieDetail.h" #import "MovieDetailContent.h" #import "LoadMovieFullTask.h" #import "OCDoubleController.h" #import "OCLoader.h" #import "OCMovieViewPager.h" #import "OCLoadShowTimesTask.h" #import "MovieDetailTheaterList.h" #import "OCMovieBandeAnnonceSlider.h" #import "OCMovieDelegates.h" #import "OCMovieDetailStarList.h" @interface MovieDetailController : OCDoubleController @property (strong, nonatomic) Movie *movie; @property (strong,nonatomic) HeaderMovieDetail * headerMovieDetail; @property (strong,nonatomic) MovieDetailContent * contentMovie; @property (strong,nonatomic) MovieDetailTheaterList * theaterList; @property (strong,nonatomic) OCMovieDetailStarList * starList; @property (strong,nonatomic) OCMovieViewPager *viewPager; @property (strong,nonatomic) OCMovieBandeAnnonceSlider *viewPagerBa; @property (strong,nonatomic) CAGradientLayer * gradient100; @property (strong,nonatomic) UIView * gradientViewBlack100; @property (strong, nonatomic) LoadMovieFullTask *task; @property (retain, nonatomic) IBOutlet UIButton *icPictures; @property (retain, nonatomic) IBOutlet UIButton *icBandeAnnonce; @end ================================================ FILE: ociney/src/Controller/MovieDetailController.m ================================================ // // MovieDetailController.m // ociney // // Created by Kevin De Jesus Ferreira on 01/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "MovieDetailController.h" #import "UIImageView+WebCache.h" #import "Color+Hex.h" #import "OCAppDelegate.h" #import "DKScrollingTabController.h" #import "TTUIScrollViewSlidingPages.h" #import "OCTheaterDetailMovieController.h" #import #import "OCStarDetailViewController.h" #import "AnalyticsKit.h" @import MediaPlayer; @interface MovieDetailController (){ OCAppDelegate * appDelegate; CLLocationManager *locationManager; } @end @implementation MovieDetailController - (void)viewDidLoad { [AnalyticsKit logScreen:@"MovieDetail"]; self.url = self.movie.poster.href; [super viewDidLoad]; self.headerHeight = MOVIE_HEADER_HEIGHT; appDelegate = (OCAppDelegate *)[[UIApplication sharedApplication] delegate]; self.gradientViewBlack100 = [[UIView alloc]initWithFrame:CGRectZero]; [self.frontEnd addSubview:self.gradientViewBlack100]; self.gradient100 = [CAGradientLayer layer]; self.gradient100.colors = [NSArray arrayWithObjects:(id)[[UIColor colorFromHexString:@"#000000d9"] CGColor], (id)[[UIColor blackColor] CGColor], nil]; [self.gradientViewBlack100.layer insertSublayer:self.gradient100 atIndex:0]; self.headerMovieDetail = [[HeaderMovieDetail alloc]initWithFrame:CGRectZero]; self.headerMovieDetail.delegate = self; [self.headerMovieDetail setBackgroundColor:[UIColor clearColor]]; [self.frontEnd addSubview:self.headerMovieDetail]; self.viewPager = [OCMovieViewPager new]; [self.backEnd addSubview:self.viewPager]; self.viewPagerBa = [OCMovieBandeAnnonceSlider new]; self.viewPagerBa.delegate =self; self.viewPagerBa.hidden = YES; [self.backEnd addSubview:self.viewPagerBa]; self.theaterList = [MovieDetailTheaterList new]; self.theaterList.delegate = self; [self.backEnd addSubview:self.theaterList]; self.theaterList.hidden = YES; self.starList = [OCMovieDetailStarList new]; self.starList.delegate = self; [self.backEnd addSubview:self.starList]; self.starList.hidden = YES; [self ajouterImage]; } -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if(self.task == nil){ self.task = [[LoadMovieFullTask alloc]initWithDelegate:self]; [self.task execute:@[[NSString stringWithFormat:@"%i",self.movie.code]]]; } } -(void)icPicturesTap{ self.icBandeAnnonce.selected = NO; self.icPictures.selected = YES; self.viewPagerBa.hidden = YES; self.viewPager.hidden = NO; self.starList.hidden = YES; self.theaterList.hidden = YES; } -(void)icBaTap{ self.icBandeAnnonce.selected = YES; self.icPictures.selected = NO; self.viewPagerBa.hidden = NO; self.viewPager.hidden = YES; self.starList.hidden = YES; self.theaterList.hidden = YES; } -(void) viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [UIView animateWithDuration:0.3 animations:^{ self.icBandeAnnonce.hidden = YES; self.icPictures.hidden = YES; } completion:^(BOOL finished) { [self.icBandeAnnonce removeFromSuperview]; [self.icPictures removeFromSuperview]; }]; } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self setTitle:@""]; { self.icPictures = [UIButton new]; self.icBandeAnnonce = [UIButton new]; [self.icPictures setImage:[UIImage imageNamed:@"ic_picture_30"] forState:UIControlStateNormal]; [self.icPictures setImage:[UIImage imageNamed:@"ic_picture_80"] forState:UIControlStateHighlighted]; [self.icPictures setImage:[UIImage imageNamed:@"ic_picture_80"] forState:UIControlStateSelected]; [self.icPictures addTarget:self action:@selector(icPicturesTap) forControlEvents:UIControlEventTouchUpInside]; [self.icBandeAnnonce setImage:[UIImage imageNamed:@"ic_bandeannonce_30"] forState:UIControlStateNormal]; [self.icBandeAnnonce setImage:[UIImage imageNamed:@"ic_bandeannonce_80"] forState:UIControlStateHighlighted]; [self.icBandeAnnonce setImage:[UIImage imageNamed:@"ic_bandeannonce_80"] forState:UIControlStateSelected]; [self.icBandeAnnonce addTarget:self action:@selector(icBaTap) forControlEvents:UIControlEventTouchUpInside]; [self.navigationController.navigationBar.viewForBaselineLayout addSubview:self.icPictures]; [self.navigationController.navigationBar.viewForBaselineLayout addSubview:self.icBandeAnnonce]; } self.icPictures.selected = YES; self.gradientViewBlack100.frame = CGRectMake(0.0f, self.headerHeight, self.frontEnd.frame.size.width,self.frontEnd.frame.size.height- self.headerHeight); self.gradient100.frame = self.gradientViewBlack100.bounds; self.viewPager.frame = self.backEnd.bounds; self.viewPagerBa.frame = self.backEnd.bounds; { int y = self.navigationController.navigationBar.frame.origin.y+self.navigationController.navigationBar.frame.size.height; self.theaterList.frame = CGRectMake(0.0f, y, self.backEnd.bounds.size.width,self.backEnd.bounds.size.height- y); self.starList.frame = CGRectMake(0.0f, y, self.backEnd.bounds.size.width,self.backEnd.bounds.size.height- y); } self.headerMovieDetail.frame = CGRectMake(0,0, self.view.frame.size.width,self.headerHeight); self.headerMovieDetail.clipsToBounds = NO; [self.headerMovieDetail chargerAvecMovie:self.movie]; { int margin = 10; int width = 30; int height = 30; { int x = self.navigationController.navigationBar.frame.size.width - width - margin; int y = 0; self.icBandeAnnonce.frame = CGRectMake(x, y, width, height); self.icBandeAnnonce.center = CGPointMake(self.icBandeAnnonce.center.x, self.navigationController.navigationBar.frame.size.height/2); } { int x = self.navigationController.navigationBar.frame.size.width - self.icBandeAnnonce.frame.size.width - width - margin - 5; int y = 0; self.icPictures.frame = CGRectMake(x, y, width, height); self.icPictures.center = CGPointMake(self.icPictures.center.x, self.navigationController.navigationBar.frame.size.height/2); } } } #pragma mark - OCLoadMoviesTaskDelegate -(void)onMovieFullRecu:(LoadMovieFullTask*)task movie:(Movie *)movie{ [super enablePan:true]; self.movie = movie; self.contentMovie = [[MovieDetailContent alloc]initWithFrame:CGRectZero]; self.contentMovie.height = -1; self.contentMovie.delegate = self; [self.contentMovie setBackgroundColor:[UIColor clearColor]]; [self.frontEnd addSubview:self.contentMovie]; self.contentMovie.frame = CGRectMake(0,self.headerHeight, self.view.frame.size.width,self.view.frame.size.height-self.headerHeight); [self.contentMovie chargerAvecMovie:self.movie]; self.headerMovieDetail.movie = movie; [self.headerMovieDetail chargerVersionsDisponibles]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (MOVIE_HEADER_ANIMATION + 0.5) * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ [self openAndCloseMenu]; self.viewPager.movie = movie; [self.viewPager reloadData]; self.viewPagerBa.ba = [movie.bandesAnnonces mutableCopy]; self.viewPagerBa.movie = movie; [self.viewPagerBa reloadData]; [self ajouterImage]; }); } -(void)lancerVueTheatreDetailMovie { OCTheaterDetailMovieController *controller = [[OCTheaterDetailMovieController alloc] init]; controller.movie = self.movie; [self.navigationController pushViewController:controller animated:YES]; } -(void)onMovieFullRecuVide:(LoadMovieFullTask*)task{ } -(void)erreurReseau:(AsyncTask*)task { } -(void)afficherChargement:(AsyncTask*)task afficher:(BOOL)afficher { if (afficher) { self.headerMovieDetail.loader.hidden = NO; [self.headerMovieDetail.loader animer]; }else{ self.headerMovieDetail.loader.hidden = YES; [self.headerMovieDetail.loader stopAnimating]; } } #pragma mark - onPanDelegate -(void)onPanJaquette:(UIPanGestureRecognizer *)onPan{ [self onPan:onPan]; } #pragma mark - MovideDetailContentDelegate -(void)horairesClicked { [self findLocation]; } -(void)memberClicked:(PersonFull *)person{ OCStarDetailViewController * controller = [[OCStarDetailViewController alloc]init]; controller.star = person; [self setTitle:self.movie.title]; [self.navigationController pushViewController:controller animated:YES]; } -(void)findLocation { locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.distanceFilter = kCLDistanceFilterNone; locationManager.desiredAccuracy = kCLLocationAccuracyBest; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) [locationManager requestAlwaysAuthorization]; [locationManager startUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { [locationManager stopUpdatingLocation]; if(locations.count > 0){ CLLocation* newLocation = locations[0]; OCAppDelegate* app = APP_DELEGATE; app.myLocationGPS =newLocation; NSString *lat = [NSString stringWithFormat:@"%f",newLocation.coordinate.latitude]; NSString *lng = [NSString stringWithFormat:@"%f",newLocation.coordinate.longitude]; if(DEBUG){ lat = @"48.85568"; lng = @"2.339401"; } [[[OCLoadShowTimesTask alloc] initWithDelegate:self] execute:@[self.movie, lat, lng]]; } } -(void)onLoadShowTimesTaskCallBack:(NSArray*)result { self.theaterList.hidden = NO; [self.theaterList loadTheaters:result]; [self openAndCloseMenu]; self.viewPagerBa.hidden = YES; self.viewPager.hidden = YES; self.starList.hidden = YES; } -(void)didSelectTheater:(Theater*)theater { OCTheaterDetailMovieController* controller = [[OCTheaterDetailMovieController alloc] init]; controller.theater = theater; controller.movie = self.movie; [self.navigationController pushViewController:controller animated:YES]; } -(void)onBandeAnnonceClicked:(Media*)bandeAnnonce { Rendition* r = bandeAnnonce.rendition[0]; MPMoviePlayerViewController* player = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:r.href]]; player.moviePlayer.scalingMode = MPMovieScalingModeAspectFit; [self presentMoviePlayerViewControllerAnimated:player]; } -(void)onMoreStarClicked { self.starList.movie = self.movie; self.starList.hidden = NO; [self.starList.tableView reloadData]; [self openAndCloseMenu]; } -(void)onStarClicked:(CastMember *)member { PersonFull * person = [[PersonFull alloc]init]; person.activity = member.person.activity; person.picture = member.picture; Name * name = [[Name alloc]init]; name.family = member.person.name; name.given = @""; person.name = name; person.code = member.person.code; person.statistics = member.person.statistics; [self memberClicked:person]; } @end ================================================ FILE: ociney/src/Controller/OCCreditsViewController.h ================================================ // // OCCreditsViewController.h // ociney // // Created by florent champigny on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import @interface OCCreditsViewController : UIViewController @property (strong,nonatomic) UIImageView *logo; @property (strong,nonatomic) UIImageView *texte; @property (strong,nonatomic) UILabel *version; @property (strong,nonatomic) UIImageView *image0; @property (strong,nonatomic) UIImageView *image1; @property (strong,nonatomic) UIImageView *image2; @end ================================================ FILE: ociney/src/Controller/OCCreditsViewController.m ================================================ // // OCCreditsViewController.m // ociney // // Created by florent champigny on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import "OCCreditsViewController.h" #import "Constantes.h" #import "Color+Hex.h" #import "OCAppDelegate.h" #import "AnalyticsKit.h" @implementation OCCreditsViewController -(void)viewDidLoad { [super viewDidLoad]; [AnalyticsKit logScreen:@"Credits"]; self.view.backgroundColor =[UIColor colorFromHexString:@"#333333"]; [self.view addSubview:(self.logo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ic_in_app_big"]])]; self.logo.contentMode = UIViewContentModeScaleAspectFit; self.logo.alpha = 0.3; [self.view addSubview:(self.texte = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ic_txt_ociney"]])]; self.texte.contentMode = UIViewContentModeScaleAspectFit; [self.view addSubview:(self.version = [UILabel new])]; self.version.text = VERSION_APPLICATION; self.version.textColor = [UIColor colorFromHexString:WHITE90]; self.version.textAlignment = NSTextAlignmentCenter; self.version.font = [UIFont fontWithName:REGULAR size:12]; [self.view addSubview:(self.image0 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"konami_flo"]])]; self.image0.userInteractionEnabled = YES; self.image0.contentMode = UIViewContentModeScaleAspectFit; [self.image0 addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImage0)]]; [self.view addSubview:(self.image1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"konami_kevin"]])]; self.image1.userInteractionEnabled = YES; self.image1.contentMode = UIViewContentModeScaleAspectFit; [self.image1 addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImage1)]]; [self.view addSubview:(self.image2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"konami_pooley"]])]; self.image2.userInteractionEnabled = YES; self.image2.contentMode = UIViewContentModeScaleAspectFit; [self.image2 addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImage2)]]; } -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [APP_DELEGATE cacherBoutonRecherche:YES]; self.title = @"Crédits"; NSInteger globalY = 30; NSInteger margin = 5; self.logo.frame = CGRectMake(0, globalY, 160, 50); self.logo.center = CGPointMake(self.view.bounds.size.width/2, self.logo.center.y); globalY = self.logo.frame.origin.y + self.logo.frame.size.height + 5; self.texte.frame = CGRectMake(0, globalY, 120, 40); self.texte.center = CGPointMake(self.view.bounds.size.width/2, self.texte.center.y); globalY = self.texte.frame.origin.y + self.texte.frame.size.height; self.version.frame = CGRectMake(0, globalY, 100, 50); [self.version sizeToFit]; self.version.center = CGPointMake(self.view.bounds.size.width/2, self.version.center.y); globalY = self.version.frame.origin.y + self.version.frame.size.height; globalY += 30; NSInteger imageHeight = 80; NSInteger imageWidth = 200; self.image0.frame = CGRectMake(0, globalY, imageWidth, imageHeight); self.image0.center = CGPointMake(self.view.bounds.size.width/2, self.image0.center.y); globalY = self.image0.frame.origin.y + self.image0.frame.size.height + margin; self.image1.frame = CGRectMake(0, globalY, imageWidth, imageHeight); self.image1.center = CGPointMake(self.view.bounds.size.width/2, self.image1.center.y); globalY = self.image1.frame.origin.y + self.image1.frame.size.height + margin; self.image2.frame = CGRectMake(0, globalY, imageWidth, imageHeight); self.image2.center = CGPointMake(self.view.bounds.size.width/2, self.image2.center.y); globalY = self.image2.frame.origin.y + self.image2.frame.size.height + margin; } -(void)tapImage0 { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://plus.google.com/+florentchampigny"]]; } -(void)tapImage1 { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://plus.google.com/+DeJesusFerreiraK%C3%A9vin"]]; } -(void)tapImage2 { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://plus.google.com/+LoganBOURGOIN"]]; } @end ================================================ FILE: ociney/src/Controller/OCDoubleController.h ================================================ // // OCDoubleController.h // ociney // // Created by florent champigny on 24/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import @interface OCDoubleController : UIViewController @property (assign, nonatomic) float firstX; @property (assign, nonatomic) float firstY; @property (assign, nonatomic) CGPoint _origin; @property (assign, nonatomic) CGPoint _final; @property (assign, nonatomic) CGFloat duration; @property (strong, nonatomic) UIView * backEnd; @property (strong, nonatomic) UIView * frontEnd; @property (strong,nonatomic) UIImageView * imageProgress; @property (strong,nonatomic) NSString * url; @property (assign, nonatomic) NSInteger headerHeight; @property (strong, nonatomic) UIPanGestureRecognizer *panGesture; -(void)openAndCloseMenu; -(void)onPan:(UIPanGestureRecognizer *)pan; -(void)enablePan:(BOOL)enable; -(void) ajouterImage; @end ================================================ FILE: ociney/src/Controller/OCDoubleController.m ================================================ // // OCDoubleController.m // ociney // // Created by florent champigny on 24/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCDoubleController.h" #import "UIImageView+WebCache.h" #import "UIImage+Blur.h" #import "QuartzCore/QuartzCore.h" #define DOUBLE_CONTROLLER_MARGIN_TOP 40 @interface OCDoubleController (){ CGRect originalNavigationBarFrame; CGRect prevNavigationBarFrame; CGRect prevFrontEndFrame; BOOL firstAppearance; } @end @implementation OCDoubleController - (void)viewDidLoad { [super viewDidLoad]; self.navigationController.navigationBar.translucent = YES; self.view.backgroundColor = [UIColor blackColor]; self.backEnd = [[UIView alloc]initWithFrame:CGRectZero]; [self.backEnd setBackgroundColor:[UIColor blackColor]]; [self.backEnd setUserInteractionEnabled:YES]; [self.view addSubview:self.backEnd]; self.frontEnd = [[UIView alloc]initWithFrame:CGRectZero]; [self.frontEnd setBackgroundColor:[UIColor clearColor]]; [self.frontEnd setUserInteractionEnabled:YES]; [self.view addSubview:self.frontEnd]; self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(onPan:)]; [self enablePan:NO]; self.imageProgress = [[UIImageView alloc]initWithFrame:CGRectZero]; self.imageProgress.contentMode = UIViewContentModeScaleAspectFill; self.imageProgress.backgroundColor = [UIColor blackColor]; self.imageProgress.userInteractionEnabled = NO; firstAppearance = YES; [self.imageProgress sd_setImageWithURL:[NSURL URLWithString:self.url] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { self.imageProgress.image = [self.imageProgress.image blur]; }]; } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.backEnd.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); self.imageProgress.frame = self.backEnd.bounds; self.frontEnd.frame = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y + self.view.bounds.size.height - self.headerHeight, self.view.bounds.size.width, self.view.bounds.size.height - DOUBLE_CONTROLLER_MARGIN_TOP); if(firstAppearance){ firstAppearance = false; originalNavigationBarFrame = self.navigationController.navigationBar.frame; }else{ self.frontEnd.frame = prevFrontEndFrame; self.navigationController.navigationBar.frame = prevNavigationBarFrame; } } -(void)viewWillDisappear:(BOOL)animated { prevNavigationBarFrame = self.navigationController.navigationBar.frame; prevFrontEndFrame = self.frontEnd.frame; [UIView animateWithDuration:.1 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ self.navigationController.navigationBar.frame = originalNavigationBarFrame; } completion:^(BOOL finished) { }]; } - (void)onPan:(UIPanGestureRecognizer *)pan { CGPoint translation = [pan translationInView:self.frontEnd]; CGPoint velocity = [pan velocityInView:self.frontEnd]; switch (pan.state) { case UIGestureRecognizerStateBegan: self._origin = self.frontEnd.frame.origin; break; case UIGestureRecognizerStateChanged:{ NSInteger pos = self._origin.y + translation.y; //NSLog(@"%ld",pos); if (pos >= 0){ float alpha = 1.0-(pos*1.0)/self.frontEnd.frame.size.height; if(alpha > 0.8) alpha = 1; if(alpha < 0.2) alpha = 0; // NSLog(@"%f",alpha); self.frontEnd.transform = CGAffineTransformMakeTranslation(0, translation.y); self.imageProgress.alpha = alpha; } CGRect navFrame = self.navigationController.navigationBar.frame; NSInteger posBar = pos - navFrame.size.height; if(posBar<20){ navFrame.origin.y = posBar; } else if(posBar>navFrame.size.height){ navFrame.origin.y = originalNavigationBarFrame.origin.y; } self.navigationController.navigationBar.frame = navFrame; } break; case UIGestureRecognizerStateEnded: case UIGestureRecognizerStateCancelled: { CGRect navFrame = self.navigationController.navigationBar.frame; CGPoint finalOrigin = CGPointZero; if (velocity.y >= 0) { self.imageProgress.alpha = 0; navFrame.origin.y = originalNavigationBarFrame.origin.y; finalOrigin.y = self.view.frame.size.height - self.headerHeight; }else{ self.imageProgress.alpha = 1; finalOrigin.y = DOUBLE_CONTROLLER_MARGIN_TOP; navFrame.origin.y = -navFrame.size.height; } CGRect f = self.frontEnd.frame; f.origin = finalOrigin; [UIView animateWithDuration:.3 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{ self.frontEnd.transform = CGAffineTransformIdentity; self.frontEnd.frame = f; self.navigationController.navigationBar.frame = navFrame; } completion:^(BOOL finished) { }]; } break; default: break; } } -(void)enablePan:(BOOL)enable { if(enable) { [self.frontEnd addGestureRecognizer:_panGesture]; }else{ [self.frontEnd removeGestureRecognizer:_panGesture]; } } -(void)openAndCloseMenu{ CGPoint finalOrigin; CGRect f = self.frontEnd.frame; int alpha = 0; CGRect navFrame = self.navigationController.navigationBar.frame; if (f.origin.y == DOUBLE_CONTROLLER_MARGIN_TOP){ alpha = 0; navFrame.origin.y = originalNavigationBarFrame.origin.y; finalOrigin.y = self.view.frame.size.height - self.headerHeight; }else { alpha = 1; finalOrigin.y = DOUBLE_CONTROLLER_MARGIN_TOP; navFrame.origin.y = -navFrame.size.height; } finalOrigin.x = 0; f.origin = finalOrigin; [UIView animateWithDuration:.4 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ self.frontEnd.transform = CGAffineTransformIdentity; self.frontEnd.frame = f; self.navigationController.navigationBar.frame = navFrame; self.imageProgress.alpha = alpha; } completion:^(BOOL finished) { }]; } -(void) ajouterImage{ if(self.imageProgress.superview != nil) [self.imageProgress removeFromSuperview]; [self.backEnd addSubview:self.imageProgress]; } @end ================================================ FILE: ociney/src/Controller/OCListMovieViewController.h ================================================ // // OCMovieControllerViewController.h // ociney // // Created by Kevin De Jesus Ferreira on 24/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "OCLoadMoviesTask.h" #import "OCMovieCell.h" #import "RechercheTaskMovie.h" #import "OCListViewController.h" @interface OCListMovieViewController : OCListViewController @property (strong, nonatomic) OCLoadMoviesTask *task; // Search movie @end ================================================ FILE: ociney/src/Controller/OCListMovieViewController.m ================================================ // // OCMovieControllerViewController.m // ociney // // Created by Kevin De Jesus Ferreira on 24/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCListMovieViewController.h" #import "OCMovieCell.h" #import "OCAppDelegate.h" #import "MovieDetailController.h" #import "AnalyticsKit.h" #define IDENTIFIER_MOVIE @"movie" @interface OCListMovieViewController () { } @end @implementation OCListMovieViewController - (void)viewDidLoad { [super viewDidLoad]; [AnalyticsKit logScreen:@"ListMovie"]; self.titleView = @"Films"; // On initialise la search bar self.appDelegate.placeholderSearch = @"Rechercher un film"; self.appDelegate.task = [[RechercheTaskMovie alloc]initWithDelegate:self]; self.appDelegate.task.cancelDelegate = self; } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [[self navigationController] setNavigationBarHidden:NO animated:YES]; self.navigationController.navigationBar.opaque = YES; self.navigationController.navigationBar.translucent = NO; [self scrollViewDidScroll:nil]; self.navigationItem.hidesBackButton = YES; self.navigationController.navigationBar.barTintColor = [UIColor blackColor]; self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:IDENTIFIER_MOVIE]; if(cell == nil){ [tableView registerNib:[UINib nibWithNibName:@"OCMovieCell" bundle:nil] forCellReuseIdentifier:IDENTIFIER_MOVIE]; cell = [tableView dequeueReusableCellWithIdentifier:IDENTIFIER_MOVIE]; [cell awakeFromNib]; } cell.contentView.frame = CGRectMake(cell.contentView.frame.origin.x, cell.contentView.frame.origin.y, self.tableView.frame.size.width, cell.contentView.frame.size.height); cell.selectionStyle = UITableViewCellSelectionStyleNone; if (self.loadMore && indexPath.row == [self.array count] - 5) { [self launchReload]; } return cell; } -(void) launchReload{ self.page++; if(!self.searchOn){ self.task = [[OCLoadMoviesTask alloc]initWithDelegate:self]; [self.task execute:@[@"nowshowing",@"small",@"toprank", @20, @(self.page)]]; }else{ [self.appDelegate searchBarMore:(int)self.page]; } } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return MOVIE_CELL_HEIGHT; } - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath: (NSIndexPath *)indexPath{ if(self.apparitions.count <= indexPath.row){ [self.apparitions addObject:@0]; } int apparition = [((NSNumber*) self.apparitions[(NSUInteger) indexPath.row]) intValue]+1; self.apparitions[(NSUInteger) indexPath.row] = @(apparition); OCMovieCell *c = (OCMovieCell*)cell; [c chargerAvecMovie:self.array[(NSUInteger) indexPath.row] anDelegate:self]; if(apparition == 1) [c animer]; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { // Get visible cells on table view. NSArray *visibleCells = [self.tableView visibleCells]; for (OCMovieCell *cell in visibleCells) { [cell cellOnTableView:self.tableView didScrollOnView:self.view]; } } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return 0.01f; } #pragma mark - OCLoadMoviesTaskDelegate -(void)onMoviesListRecu:(OCLoadMoviesTask*)task moviesList:(NSArray*)moviesList{ [self afficherEmptyView:NO]; [self.array addObjectsFromArray:moviesList]; [self.tableView reloadData]; } -(void)onMoviesListResultatVide:(OCLoadMoviesTask*)task{ self.loadMore = NO; } #pragma mark - RechercheTaskMovieDelegate -(void)onRechercheFilmRecu:(RechercheTaskMovie*)task movies:(NSArray *)listMovie{ [self afficherEmptyView:NO]; if(!self.searchOn){ self.page = 1; self.loadMore = YES; } self.searchOn = YES; if(self.page == 1){ [self.array removeAllObjects]; } [self.array addObjectsFromArray:listMovie]; [self.tableView reloadData]; } -(void)onRechercheFilmVide:(RechercheTaskMovie*)task{ self.loadMore = NO; if(self.page == 1){ [self afficherEmptyView:YES]; } } -(void)erreurReseau:(AsyncTask*)task { } -(void)afficherChargement:(AsyncTask*)task afficher:(BOOL)afficher { [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:afficher]; } #pragma mark - CancelSearchDelegate -(void)onCancelSearch{ if([self.appDelegate.moviesList count] != 0){ [self afficherEmptyView:NO]; } self.loadMore = YES; self.page = 1; [self.array removeAllObjects]; [self.array addObjectsFromArray:self.appDelegate.moviesList]; self.searchOn = NO; [self.tableView reloadData]; } #pragma mark - OCMovieCellDelegate -(void)onClick:(OCMovieCell*)cell movie:(Movie *)movie{ [super onClick]; MovieDetailController * controller = [[MovieDetailController alloc]init]; controller.movie = movie; [self.navigationController pushViewController:controller animated:YES]; } @end ================================================ FILE: ociney/src/Controller/OCListViewController.h ================================================ // // OCListControllerViewController.h // ociney // // Created by florent champigny on 25/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "OCRechercheSearchBarController.h" #import "OCEmptyView.h" @interface OCListViewController : OCRechercheSearchBarController @property (strong, nonatomic) NSMutableArray * array; @property (strong, nonatomic) UITableView * tableView; @property (strong, nonatomic) NSMutableArray *apparitions; @property (assign,atomic) NSInteger page; @property (assign,atomic) BOOL loadMore; - (void)onClick; @property (strong,nonatomic) OCEmptyView * emptyView; -(void) afficherEmptyView:(BOOL)afficher; @property (strong,nonatomic) CAGradientLayer * gradient; @end ================================================ FILE: ociney/src/Controller/OCListViewController.m ================================================ // // OCListControllerViewController.m // ociney // // Created by florent champigny on 25/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCListViewController.h" #import "OCAppDelegate.h" #import "Color+Hex.h" @interface OCListViewController (){ OCAppDelegate* delegate; } @end @implementation OCListViewController -(id)init { if(self = [super init]){ self.page = 1; self.loadMore = YES; self.array = [NSMutableArray array]; self.apparitions = [NSMutableArray array]; delegate = (OCAppDelegate*) [[UIApplication sharedApplication] delegate]; } return self; } - (void)viewDidLoad { [super viewDidLoad]; // On alloue la table view on se met en delegate self.tableView = [[UITableView alloc] initWithFrame:self.view.frame]; self.tableView.delegate = self; self.tableView.dataSource = self; self.tableView.bounces = NO; self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; [self.view addSubview:self.tableView]; self.emptyView = [[OCEmptyView alloc]initWithFrame:CGRectZero]; self.emptyView.hidden = YES; [self.view addSubview:self.emptyView]; { self.gradient = [CAGradientLayer layer]; self.gradient.colors = @[(id) [[UIColor colorFromHexString:@"#333333ff"] CGColor], (id) [[UIColor colorFromHexString:@"#555555ff"] CGColor]]; [self.tableView.layer insertSublayer:self.gradient atIndex:0]; } } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.tableView.frame = self.view.bounds; self.emptyView.frame = self.view.bounds; [self.emptyView positionner]; self.gradient.frame = self.tableView.bounds; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return [self.array count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { return nil; } - (void)onClick{ [self.appDelegate cacherMenu:YES]; [self.appDelegate cacherSearchBar:YES]; if(!self.searchOn) [self.appDelegate fermerSearchBar:YES andCacherRecherche:YES]; [self.appDelegate displayDetailScreen:YES]; [self setTitle:self.titleView]; } -(void) afficherEmptyView:(BOOL)afficher{ self.emptyView.hidden = !afficher; self.tableView.hidden = afficher; } @end ================================================ FILE: ociney/src/Controller/OCPosterController.h ================================================ // // OCPosterController.h // ociney // // Created by Kevin De Jesus Ferreira on 05/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "PosterView.h" #import "Movie.h" @protocol OCPosterControllerDelegate -(void)onPosterSelected:(Movie*)movie; @end @interface OCPosterController : UIViewController @property (strong,nonatomic) PosterView * posterView; @property (strong,nonatomic) Movie * movie; @property (assign,nonatomic) CGRect frameContent; @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/Controller/OCPosterController.m ================================================ // // OCPosterController.m // ociney // // Created by Kevin De Jesus Ferreira on 05/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCPosterController.h" @interface OCPosterController () @end @implementation OCPosterController - (void)viewDidLoad { [super viewDidLoad]; self.posterView = [[PosterView alloc]initWithFrame:CGRectZero]; [self.view addSubview:self.posterView]; self.posterView.userInteractionEnabled = YES; [self.posterView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)]]; } -(void) viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.posterView.frame = self.frameContent; [self.posterView chargerAvecMovie:self.movie]; } -(void)tap { [self.delegate onPosterSelected:self.movie]; } @end ================================================ FILE: ociney/src/Controller/OCRechercheSearchBarController.h ================================================ // // OCRechercheSearchBarController.h // ociney // // Created by Kevin De Jesus Ferreira on 23/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "OCAppDelegate.h" @interface OCRechercheSearchBarController : UIViewController @property (assign,nonatomic) BOOL searchOn; @property (strong,nonatomic) NSString * titleView; @property (strong,nonatomic) OCAppDelegate * appDelegate; @end ================================================ FILE: ociney/src/Controller/OCRechercheSearchBarController.m ================================================ // // OCRechercheSearchBarController.m // ociney // // Created by Kevin De Jesus Ferreira on 23/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCRechercheSearchBarController.h" @interface OCRechercheSearchBarController () @end @implementation OCRechercheSearchBarController - (void)viewDidLoad { [super viewDidLoad]; self.appDelegate = (OCAppDelegate*)[[UIApplication sharedApplication] delegate]; self.searchOn = NO; } -(void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.appDelegate displayDetailScreen:NO]; if(!self.searchOn){ [self setTitle:self.titleView]; [self.appDelegate cacherBoutonRecherche:NO]; [self.appDelegate cacherSearchBar:NO]; }else{ [self setTitle:@""]; [self.appDelegate cacherSearchBar:NO]; } [self.appDelegate cacherMenu:NO]; } @end ================================================ FILE: ociney/src/Controller/OCStarDetailViewController.h ================================================ // // OCStarDetailViewController.h // ociney // // Created by florent champigny on 21/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "Person.h" #import "HeaderStarDetail.h" #import "UIImageView+WebCache.h" #import "OCDoubleController.h" #import "OCLoadPersonTask.h" #import "StarDetail.h" #import "OCStarViewPager.h" #import "OCStarFilmoGrid.h" #import "StarDetailDelegate.h" @interface OCStarDetailViewController : OCDoubleController @property (strong, atomic) Person* star; @property (retain, nonatomic) IBOutlet HeaderStarDetail* headerStarDetail; @property (retain, nonatomic) IBOutlet StarDetail* starDetail; @property (retain, nonatomic) IBOutlet OCStarViewPager * viewPager; @property (retain, nonatomic) IBOutlet OCStarFilmoGrid * grid; @property (retain, nonatomic) IBOutlet UIButton *icPictures; @property (retain, nonatomic) IBOutlet UIButton *icFilmo; @end ================================================ FILE: ociney/src/Controller/OCStarDetailViewController.m ================================================ // // OCStarDetailViewController.m // ociney // // Created by florent champigny on 21/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCStarDetailViewController.h" #import "Color+Hex.h" #import "UIImage+Blur.h" #import "MovieDetailController.h" #import "AnalyticsKit.h" @implementation OCStarDetailViewController - (void)viewDidLoad { [AnalyticsKit logScreen:@"StarDetail"]; self.url = self.star.picture.href; [super viewDidLoad]; self.headerHeight = HEADER_STAR_HEIGHT; self.starDetail = [[StarDetail alloc] init]; self.starDetail.delegate = self; [self.frontEnd addSubview:self.starDetail]; self.headerStarDetail = [[HeaderStarDetail alloc] initWithFrame:CGRectZero]; self.headerStarDetail.star = self.star; [self.frontEnd addSubview:self.headerStarDetail]; self.viewPager = [[OCStarViewPager alloc] init]; [self.backEnd addSubview:self.viewPager]; self.grid = [[OCStarFilmoGrid alloc] init]; self.grid.hidden = YES; self.grid.delegate = self; [self.backEnd addSubview:self.grid]; [self ajouterImage]; NSString *code = [NSString stringWithFormat:@"%d",self.star.code]; [[[OCLoadPersonTask alloc] initWithDelegate:self] execute:@[code]]; { self.icPictures = [UIButton new]; self.icFilmo = [UIButton new]; [self.icPictures setImage:[UIImage imageNamed:@"ic_picture2_30"] forState:UIControlStateNormal]; [self.icPictures setImage:[UIImage imageNamed:@"ic_picture2_80"] forState:UIControlStateHighlighted]; [self.icPictures setImage:[UIImage imageNamed:@"ic_picture2_80"] forState:UIControlStateSelected]; [self.icPictures addTarget:self action:@selector(icPicturesTap) forControlEvents:UIControlEventTouchUpInside]; [self.icFilmo setImage:[UIImage imageNamed:@"ic_filmo_30"] forState:UIControlStateNormal]; [self.icFilmo setImage:[UIImage imageNamed:@"ic_filmo_80"] forState:UIControlStateHighlighted]; [self.icFilmo setImage:[UIImage imageNamed:@"ic_filmo_80"] forState:UIControlStateSelected]; [self.icFilmo addTarget:self action:@selector(icFilmoTap) forControlEvents:UIControlEventTouchUpInside]; } self.icPictures.selected = YES; } -(void)icPicturesTap{ self.icFilmo.selected = NO; self.icPictures.selected = YES; self.grid.hidden = YES; self.viewPager.hidden = NO; } -(void)icFilmoTap{ self.icFilmo.selected = YES; self.icPictures.selected = NO; self.grid.hidden = NO; self.viewPager.hidden = YES; } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.headerStarDetail.frame = CGRectMake(0, 0, self.view.bounds.size.width, HEADER_STAR_HEIGHT); self.viewPager.frame = self.backEnd.bounds; { int x = self.view.bounds.origin.x; int y = MAX(64,self.view.bounds.origin.x + self.navigationController.navigationBar.frame.size.height + self.navigationController.navigationBar.frame.origin.y); int width = self.view.bounds.size.width; int height = self.view.bounds.size.height-y; self.grid.frame = CGRectMake(x,y,width,height); self.grid.backgroundColor = [UIColor colorFromHexString:BACKGROUND_WHITE_GRAY]; } self.starDetail.frame = CGRectMake(0, HEADER_STAR_HEIGHT, self.view.bounds.size.width, self.frontEnd.bounds.size.height - self.headerStarDetail.frame.size.height); { int margin = 10; int width = 30; int height = 30; { int x = self.navigationController.navigationBar.frame.size.width - width - margin; int y = 0; self.icFilmo.frame = CGRectMake(x, y, width, height); self.icFilmo.center = CGPointMake(self.icFilmo.center.x, self.navigationController.navigationBar.frame.size.height/2); } { int x = self.navigationController.navigationBar.frame.size.width - self.icFilmo.frame.size.width - width - margin; int y = 0; self.icPictures.frame = CGRectMake(x, y, width, height); self.icPictures.center = CGPointMake(self.icPictures.center.x, self.navigationController.navigationBar.frame.size.height/2); } [self.navigationController.navigationBar.viewForBaselineLayout addSubview:self.icPictures]; [self.navigationController.navigationBar.viewForBaselineLayout addSubview:self.icFilmo]; } } -(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [self.icFilmo removeFromSuperview]; [self.icPictures removeFromSuperview]; } #pragma mark - OCLoadPersonTaskDelegate -(void)onPersonRecu:(OCLoadPersonTask*)task person:(PersonFull *)person { self.star = person; [super enablePan:true]; [self.headerStarDetail loadStarFull:(PersonFull*)self.star]; [self.starDetail loadStarFull:(PersonFull*)self.star]; [self.grid loadStarFull:(PersonFull*)self.star]; self.viewPager.star = person; [self.viewPager reloadData]; [self openAndCloseMenu]; } -(void)erreurReseau:(AsyncTask*)task { } -(void)afficherChargement:(AsyncTask*)task afficher:(BOOL)afficher { if (afficher) { self.headerStarDetail.loader.alpha = 1; self.headerStarDetail.loader.hidden = NO; [self.headerStarDetail.loader animer]; }else{ [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ self.headerStarDetail.loader.alpha = 0; } completion:^(BOOL finished) { self.headerStarDetail.loader.hidden = YES; [self.headerStarDetail.loader stopAnimating]; }]; } } #pragma mark - StarDetailDelegate -(void)onMovieClicked:(NSInteger)index { MovieDetailController *controller = [MovieDetailController new]; controller.movie = ((Participation*)self.star.participation[index]).movie; [self.navigationController pushViewController:controller animated:YES]; } -(void)onMoreMovieClicked { [self icFilmoTap]; [super openAndCloseMenu]; } -(void)onPhotoClicked:(NSInteger)index { [self.viewPager.swipeView scrollToPage:index-1 duration:0]; [self onMorePhotoClicked]; } -(void)onMorePhotoClicked { [self icPicturesTap]; [super openAndCloseMenu]; } @end ================================================ FILE: ociney/src/Controller/OCStarListController.h ================================================ // // OCStarController.h // ociney // // Created by Kevin De Jesus Ferreira on 29/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "OCLoadStarsTask.h" #import "OCAppDelegate.h" #import "OCListViewController.h" @interface OCStarListController : OCListViewController @property (strong, nonatomic) OCLoadStarsTask *task; @property (strong,nonatomic) NSArray * starsDepart; @end ================================================ FILE: ociney/src/Controller/OCStarListController.m ================================================ // // OCStarController.m // ociney // // Created by Kevin De Jesus Ferreira on 29/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCStarListController.h" #import "OCStarCell.h" #import "OCStarDetailViewController.h" #import "RechercheTaskStar.h" #import "AnalyticsKit.h" #define IDENTIFIER_STAR @"star" @interface OCStarListController () @end @implementation OCStarListController - (void)viewDidLoad { [super viewDidLoad]; [AnalyticsKit logScreen:@"ListStar"]; self.titleView = @"Stars"; self.appDelegate.placeholderSearch = @"Rechercher une star"; self.appDelegate.task = [[RechercheTaskStar alloc]initWithDelegate:self]; self.appDelegate.task.cancelDelegate = self; self.task = [[OCLoadStarsTask alloc]initWithDelegate:self]; [self.task execute:@[@"top",@"small",@30, @(self.page)]]; } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [[self navigationController] setNavigationBarHidden:NO animated:YES]; self.navigationController.navigationBar.opaque = YES; self.navigationController.navigationBar.translucent = NO; self.navigationItem.hidesBackButton = YES; self.navigationController.navigationBar.barTintColor = [UIColor blackColor]; self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}]; //[self scrollViewDidScroll:nil]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:IDENTIFIER_STAR]; if(cell == nil){ [tableView registerNib:[UINib nibWithNibName:@"OCStarCell" bundle:nil] forCellReuseIdentifier:IDENTIFIER_STAR]; cell = [tableView dequeueReusableCellWithIdentifier:IDENTIFIER_STAR]; [cell awakeFromNib]; } cell.contentView.frame = CGRectMake(cell.contentView.frame.origin.x, cell.contentView.frame.origin.y, self.tableView.frame.size.width, cell.contentView.frame.size.height); cell.selectionStyle = UITableViewCellSelectionStyleNone; if (self.loadMore && indexPath.row == [self.array count] - 5) { [self launchReload]; } return cell; } -(void) launchReload{ self.page++; self.task = [[OCLoadStarsTask alloc]initWithDelegate:self]; [self.task execute:@[@"top",@"small",@30, @(self.page)]]; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return STAR_CELL_HEIGHT; } - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath: (NSIndexPath *)indexPath{ OCStarCell *c = (OCStarCell*)cell; [c chargerAvecStar:self.array[(NSUInteger) indexPath.row]]; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [super onClick]; OCStarDetailViewController *controller = [[OCStarDetailViewController alloc] init]; controller.star = self.array[(NSUInteger) indexPath.row]; [self.navigationController pushViewController:controller animated:YES]; } #pragma mark - OCLoadStarsTaskDelegate -(void)onStarsListRecu:(OCLoadStarsTask*)task starsList:(NSArray *)starsList{ [self afficherEmptyView:NO]; [self.array addObjectsFromArray:starsList]; if(self.page == 1) self.starsDepart = [starsList copy]; [self.tableView reloadData]; } -(void)onStarsListResultatVide:(OCLoadStarsTask*)task{ self.loadMore = NO; if(self.page == 1){ [self afficherEmptyView:YES]; } } -(void)erreurReseau:(AsyncTask*)task { } -(void)afficherChargement:(AsyncTask*)task afficher:(BOOL)afficher { [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:afficher]; } #pragma mark - CancelSearchDelegate -(void)onCancelSearch{ if([self.starsDepart count] != 0){ [self afficherEmptyView:NO]; } self.loadMore = YES; self.page = 1; self.searchOn = NO; [self.array removeAllObjects]; [self.array addObjectsFromArray:self.starsDepart]; [self.tableView reloadData]; } #pragma mark - RechercheTaskStarDelegate -(void)onRechercheStarRecu:(RechercheTaskStar*)task stars:(NSArray *)listStars{ [self afficherEmptyView:NO]; if(!self.searchOn){ self.page = 1; self.loadMore = YES; [self.array removeAllObjects]; } self.searchOn = YES; [self.array addObjectsFromArray:listStars]; [self.tableView reloadData]; } -(void)onRechercheStarVide:(RechercheTaskStar*)task{ if(self.page == 1){ [self afficherEmptyView:YES]; } } @end ================================================ FILE: ociney/src/Controller/OCTheaterDetailController.h ================================================ // // OCTheaterDetailController.h // ociney // // Created by Kevin De Jesus Ferreira on 02/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "Theater.h" #import "OCLoadTheaterMoviesTask.h" #import "OCLoader.h" @interface OCTheaterDetailController : UIViewController @property (strong, nonatomic) OCLoadTheaterMoviesTask *task; @property (strong,nonatomic) UIView * content; @property (strong,nonatomic) UIImageView * viewCinema; @property (strong,nonatomic) CAGradientLayer * gradient; @property (strong,nonatomic) Theater * cinema; @property (strong,nonatomic) NSArray * movies; // Poster @property (strong,nonatomic) OCLoader* loader; @end ================================================ FILE: ociney/src/Controller/OCTheaterDetailController.m ================================================ // // OCTheaterDetailController.m // ociney // // Created by Kevin De Jesus Ferreira on 02/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCTheaterDetailController.h" #import "Color+Hex.h" #import "Constantes.h" #import "TTUIScrollViewSlidingPages.h" #import "OCPosterController.h" #import "Movie.h" #import "TheaterShowtime.h" #import "OCTheaterDetailMovieController.h" #import "AnalyticsKit.h" @interface OCTheaterDetailController (){ TTScrollSlidingPagesController *slider; } @end @implementation OCTheaterDetailController - (void)viewDidLoad { [super viewDidLoad]; [AnalyticsKit logScreen:@"TheaterDetail"]; self.content = [[UIView alloc]initWithFrame:CGRectZero]; { self.gradient = [CAGradientLayer layer]; self.gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorFromHexString:@"#333333ff"] CGColor], (id)[[UIColor colorFromHexString:@"#555555ff"] CGColor], nil]; [self.content.layer insertSublayer:self.gradient atIndex:0]; } [self.view addSubview:self.content]; [self.content addSubview:self.viewCinema]; self.loader = [OCLoader loader]; [self.view addSubview:self.loader]; [self.loader animer]; self.loader.alpha = 0.4; self.navigationController.navigationBar.opaque = NO; self.navigationController.navigationBar.translucent = YES; self.task = [[OCLoadTheaterMoviesTask alloc]initWithDelegate:self]; [self.task execute:@[self.cinema]]; } -(void) viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.view.backgroundColor = [UIColor blackColor]; self.view.clipsToBounds = YES; NSInteger firstY = self.navigationController.navigationBar.frame.origin.y + self.navigationController.navigationBar.frame.size.height; { NSInteger margin = 5; NSInteger width = 18; NSInteger height = width; NSInteger y = margin + firstY; NSInteger x = self.view.bounds.size.width - width - margin; self.loader.frame = CGRectMake(x, y, width, height); } { NSInteger y = firstY; NSInteger width = self.view.bounds.size.width; NSInteger height = self.view.bounds.size.height - y; NSInteger x = self.view.bounds.origin.x; self.content.frame = CGRectMake(x, y, width, height); self.gradient.frame = self.content.bounds; } [self setTitle:self.cinema.name]; { NSInteger height = self.viewCinema.frame.size.height; NSInteger y = self.content.bounds.size.height-height; NSInteger width = self.viewCinema.frame.size.width; NSInteger x = 0; self.viewCinema.frame = CGRectMake(x, y, width, height); } } -(int)numberOfPagesForSlidingPagesViewController:(TTScrollSlidingPagesController *)source{ return (int)[self.movies count]; } -(TTSlidingPage *)pageForSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index{ OCPosterController * viewController = [[OCPosterController alloc] init]; Movie * movie = [self.movies objectAtIndex:index]; viewController.frameContent = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height-self.viewCinema.frame.size.height); viewController.movie = movie; viewController.delegate = self; return [[TTSlidingPage alloc] initWithContentViewController:viewController]; } -(TTSlidingPageTitle *)titleForSlidingPagesViewController:(TTScrollSlidingPagesController *)source atIndex:(int)index{ TTSlidingPageTitle *title; //all other pages just use a simple text header Movie * movie = [self.movies objectAtIndex:index]; title = [[TTSlidingPageTitle alloc] initWithHeaderText:movie.title]; //in reality you would have the correct header text for your page number given by "index" return title; } #pragma mark - OCLoadTheaterMoviesTaskDelegate -(void)onMoviesListRecu:(OCLoadTheaterMoviesTask*)task movieList:(NSArray *)movies{ self.movies = movies; slider = [[TTScrollSlidingPagesController alloc] init]; slider.titleScrollerHidden = YES; slider.zoomOutAnimationDisabled = YES; slider.dataSource = self; slider.disableUIPageControl = YES; slider.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height-self.viewCinema.frame.size.height); //I'm setting up the view to be fullscreen in the current view [self.view addSubview:slider.view]; [self addChildViewController:slider]; } -(void)onPosterSelected:(Movie*)movie { OCTheaterDetailMovieController *controller = [[OCTheaterDetailMovieController alloc] init]; controller.movie = movie; [self.cinema getShowTimes: [NSString stringWithFormat:@"%ld",(long)movie.code]]; controller.theater = self.cinema; [self.navigationController pushViewController:controller animated:YES]; } -(void)onMoviesListResultatVide:(OCLoadTheaterMoviesTask*)task{ } -(void)erreurReseau:(AsyncTask*)task { } -(void)afficherChargement:(AsyncTask*)task afficher:(BOOL)afficher { if(afficher) { self.loader.hidden = NO; [self.loader animer]; }else{ self.loader.hidden = YES; [self.loader stopAnimating]; } } @end ================================================ FILE: ociney/src/Controller/OCTheaterDetailMovieController.h ================================================ // // OCTheaterDetailMovieController.h // ociney // // Created by florent champigny on 30/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "TheaterDetailMovieBackground.h" #import "TheaterDetailMovieForeground.h" #import "Movie.h" #import "Theater.h" #import "OCMovieDelegates.h" #import "LoadMovieFullTask.h" @interface OCTheaterDetailMovieController : UIViewController @property (retain,nonatomic) TheaterDetailMovieBackground* background; @property (retain,nonatomic) TheaterDetailMovieForeground* foreground; @property (strong,nonatomic) Theater* theater; @property (strong,nonatomic) Movie* movie; @end ================================================ FILE: ociney/src/Controller/OCTheaterDetailMovieController.m ================================================ // // OCTheaterDetailMovieController.m // ociney // // Created by florent champigny on 30/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCTheaterDetailMovieController.h" @import MediaPlayer; #import "AnalyticsKit.h" @implementation OCTheaterDetailMovieController { BOOL first; } - (void)viewDidLoad { [super viewDidLoad]; [AnalyticsKit logScreen:@"TheaterDetailMovie"]; first = YES; [self creer]; LoadMovieFullTask *task = [[LoadMovieFullTask alloc] initWithDelegate:self]; [task execute:@[ [NSString stringWithFormat:@"%i",self.movie.code] ] ]; } -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self remplir]; } -(void)creer { self.view.clipsToBounds = YES; self.view.backgroundColor = [UIColor blackColor]; self.background = [[TheaterDetailMovieBackground alloc] initWithFrame:CGRectZero]; [self.view addSubview:self.background]; self.foreground = [[TheaterDetailMovieForeground alloc] initWithFrame:CGRectZero]; [self.view addSubview:self.foreground]; self.background.movie = self.movie; self.background.delegate = self; self.foreground.movie = self.movie; self.foreground.theater = self.theater; self.navigationController.navigationBar.opaque = NO; self.navigationController.navigationBar.translucent = YES; } -(void)remplir { { int y = self.navigationController.navigationBar.frame.origin.y+self.navigationController.navigationBar.frame.size.height; self.background.frame = CGRectMake(0.0f, y, self.view.bounds.size.width,self.view.bounds.size.height- y); } if(first){ NSInteger x = 0; NSInteger width = self.view.bounds.size.width; NSInteger height = 350; NSInteger y = self.view.bounds.size.height - MOVIE_HEADER_HEIGHT; self.foreground.frame = CGRectMake(x, y, width, height); }else{ CGRect foregroundFrame = self.foreground.frame; foregroundFrame.origin.y = self.view.bounds.size.height - foregroundFrame.size.height; self.foreground.frame = foregroundFrame; } } -(void)animerOuverture { if(first){ first = NO; [self.background animerOuverture]; CGRect foregroundFrame = self.foreground.frame; foregroundFrame.origin.y = self.view.bounds.size.height - foregroundFrame.size.height; [UIView animateWithDuration:0.4 delay:3 options:UIViewAnimationOptionCurveEaseIn animations:^{ self.foreground.header.loader.alpha = 0; self.foreground.frame = foregroundFrame; } completion:^(BOOL finished) { [self.foreground.header.loader stopAnimating]; }]; } } -(void)onBandeAnnonceClicked:(Media *)bandeAnnonce { Rendition* r = bandeAnnonce.rendition[0]; MPMoviePlayerViewController* player = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:r.href]]; player.moviePlayer.scalingMode = MPMovieScalingModeAspectFit; [self presentMoviePlayerViewControllerAnimated:player]; } -(void)onMovieFullRecu:(LoadMovieFullTask*)task movie:(Movie *)movie { self.movie = movie; [self.background loadMovie:self.movie]; [self animerOuverture]; } -(void)onMovieFullRecuVide:(LoadMovieFullTask*)task { } -(void)erreurReseau:(AsyncTask*)task { } -(void)afficherChargement:(AsyncTask*)task afficher:(BOOL)afficher { } @end ================================================ FILE: ociney/src/Controller/SlidingImageControllerController.h ================================================ // // SlidingImageControllerController.h // ociney // // Created by Kevin De Jesus Ferreira on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import @interface SlidingImageControllerController : UIViewController @property (strong,nonatomic) NSArray * urlImages; @property (assign,nonatomic) CGRect frame; -(void)ajouterImages:(NSArray *)urlImage; @end ================================================ FILE: ociney/src/Controller/SlidingImageControllerController.m ================================================ // // SlidingImageControllerController.m // ociney // // Created by Kevin De Jesus Ferreira on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "SlidingImageControllerController.h" #import "TTUIScrollViewSlidingPages.h" #import "UIImageView+WebCache.h" @interface SlidingImageControllerController () @end @implementation SlidingImageControllerController - (void)viewDidLoad { [super viewDidLoad]; self.navigationController.navigationBar.opaque = YES; self.navigationController.navigationBar.translucent = NO; UIView * vueFond = [[UIView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width, self.view.frame.size.height)]; [vueFond setBackgroundColor:[UIColor redColor]]; [self.view addSubview:vueFond]; } -(void)ajouterImages:(NSArray *)urlImage{ self.urlImages = [[NSArray alloc]initWithArray:urlImage]; TTScrollSlidingPagesController *slider = [[TTScrollSlidingPagesController alloc] init]; slider.titleScrollerHidden = YES; slider.disableUIPageControl = YES; slider.zoomOutAnimationDisabled = YES; slider.dataSource = self; /*the current view controller (self) conforms to the TTSlidingPagesDataSource protocol)*/ slider.view.frame = self.view.frame; //I'm setting up the view to be fullscreen in the current view [self.view addSubview:slider.view]; [self addChildViewController:slider]; } -(int)numberOfPagesForSlidingPagesViewController:(TTScrollSlidingPagesController *)source{ return 3; } -(TTSlidingPage *)pageForSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index{ UIViewController * viewController = [[UIViewController alloc]init]; viewController.view.frame = self.frame; UIImageView * image = [[UIImageView alloc]initWithFrame:self.frame]; [image sd_setImageWithURL:[NSURL URLWithString:[self.urlImages objectAtIndex:index]]]; [viewController.view addSubview:image]; return [[TTSlidingPage alloc] initWithContentViewController:viewController]; } -(TTSlidingPageTitle *)titleForSlidingPagesViewController:(TTScrollSlidingPagesController *)source atIndex:(int)index{ TTSlidingPageTitle *title; //all other pages just use a simple text header title = [[TTSlidingPageTitle alloc] initWithHeaderText:@"A page"]; //in reality you would have the correct header text for your page number given by "index" return title; } @end ================================================ FILE: ociney/src/Modele/AllocineResponse.h ================================================ // // AllocineResponse.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Feed.h" #import "Movie.h" #import "Theater.h" #import "PersonFull.h" #import "Protocole.h" @class PersonFull; @interface AllocineResponse : JSONModel @property (strong, nonatomic) Feed* feed; @property (strong, nonatomic) Movie* movie; @property (strong, nonatomic) Theater* theater; //@property (strong, nonatomic) NSArray* person; @property (strong, nonatomic) PersonFull* person; @end ================================================ FILE: ociney/src/Modele/AllocineResponse.m ================================================ // // AllocineResponse.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "AllocineResponse.h" @implementation AllocineResponse +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/AllocineResponseSmall.h ================================================ // // AllocineResponseSmall.h // ociney // // Created by Kevin De Jesus Ferreira on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import #import "JSONModel.h" #import "FeedSmall.h" #import "Movie.h" #import "Theater.h" #import "PersonFull.h" #import "Protocole.h" @class PersonSmall; @interface AllocineResponseSmall : JSONModel @property (strong, nonatomic) FeedSmall* feed; @property (strong, nonatomic) Movie* movie; @property (strong, nonatomic) PersonSmall* person; @end ================================================ FILE: ociney/src/Modele/AllocineResponseSmall.m ================================================ // // AllocineResponseSmall.m // ociney // // Created by Kevin De Jesus Ferreira on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import "AllocineResponseSmall.h" @implementation AllocineResponseSmall +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/CastMember.h ================================================ // // CastMember.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "PersonSmall.h" #import "ModelObject.h" #import "Picture.h" @interface CastMember : JSONModel @property (strong, nonatomic) PersonSmall* person; @property (strong, nonatomic) ModelObject* activity; @property (strong, nonatomic) Picture* picture; @property (strong, nonatomic) NSString* role; @end ================================================ FILE: ociney/src/Modele/CastMember.m ================================================ // // CastMember.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "CastMember.h" @implementation CastMember +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/CastingShort.h ================================================ // // CastingShort.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface CastingShort : JSONModel @property (strong, nonatomic) NSString* directors; @property (strong, nonatomic) NSString* actors; @end ================================================ FILE: ociney/src/Modele/CastingShort.m ================================================ // // CastingShort.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "CastingShort.h" @implementation CastingShort +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/DefaultMedia.h ================================================ // // DefaultMedia.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Media.h" #import "Protocole.h" @class Media; @interface DefaultMedia : JSONModel @property (strong, nonatomic) Media* media; @end ================================================ FILE: ociney/src/Modele/DefaultMedia.m ================================================ // // DefaultMedia.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "DefaultMedia.h" @implementation DefaultMedia +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Distributor.h ================================================ // // Distributor.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface Distributor : JSONModel @property (assign, nonatomic) int code; @property (strong, nonatomic) NSString* name; @end ================================================ FILE: ociney/src/Modele/Distributor.m ================================================ // // Distributor.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Distributor.h" @implementation Distributor +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Feature.h ================================================ // // Feature.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Publication.h" #import "Picture.h" #import "ModelObject.h" #import "Protocole.h" @interface Feature : JSONModel @property (assign, nonatomic) int code; @property (strong, nonatomic) Publication* publication; @property (strong, nonatomic) NSString* title; @property (strong, nonatomic) Picture* picture; @property (strong, nonatomic) NSArray* activity; @end ================================================ FILE: ociney/src/Modele/Feature.m ================================================ // // Feature.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Feature.h" @implementation Feature +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Feed.h ================================================ // // Feed.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "ModelObject.h" #import "Movie.h" #import "TheaterShowtime.h" #import "Theater.h" #import "Review.h" #import "Media.h" #import "Protocole.h" @interface Feed : JSONModel @property (strong, nonatomic) NSString* updated; @property (assign, nonatomic) int page; @property (assign, nonatomic) int count; @property (assign, nonatomic) int totalResults; @property (strong, nonatomic) NSArray * results; @property (strong, nonatomic) NSArray * movie; @property (strong, nonatomic) NSArray * theaterShowtimes; @property (strong, nonatomic) NSArray * theater; @property (strong, nonatomic) NSArray * review; @property (strong, nonatomic) NSArray * media; @property (strong, nonatomic) NSArray* person; @end ================================================ FILE: ociney/src/Modele/Feed.m ================================================ // // Feed.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Feed.h" @implementation Feed +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Geoloc.h ================================================ // // Geoloc.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface Geoloc : JSONModel @property (assign, nonatomic) double lat; @property (assign, nonatomic) double _long; @end ================================================ FILE: ociney/src/Modele/Geoloc.m ================================================ // // Geoloc.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Geoloc.h" @implementation Geoloc +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } +(JSONKeyMapper*)keyMapper { return [[JSONKeyMapper alloc] initWithDictionary:@{ @"long": @"_long" }]; } @end ================================================ FILE: ociney/src/Modele/HelpfulNegativeReview.h ================================================ // // HelpfulNegativeReview.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Writer.h" @interface HelpfulNegativeReview : JSONModel @property (assign, nonatomic) int code; @property (strong, nonatomic) Writer* writer; @property (strong, nonatomic) NSString* creationDate; @property (strong, nonatomic) NSString* body; @property (assign, nonatomic) double rating; @end ================================================ FILE: ociney/src/Modele/HelpfulNegativeReview.m ================================================ // // HelpfulNegativeReview.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "HelpfulNegativeReview.h" @implementation HelpfulNegativeReview +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/HelpfulPositiveReview.h ================================================ // // HelpfulPositiveReview.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Writer.h" @interface HelpfulPositiveReview : JSONModel @property (assign, nonatomic) int code; @property (strong, nonatomic) Writer* writer; @property (strong, nonatomic) NSString* creationDate; @property (strong, nonatomic) NSString* body; @property (assign, nonatomic) double rating; @end ================================================ FILE: ociney/src/Modele/HelpfulPositiveReview.m ================================================ // // HelpfulPositiveReview.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "HelpfulPositiveReview.h" @implementation HelpfulPositiveReview +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Horaires.h ================================================ // // Horaires.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface Horaires : JSONModel @property (assign, nonatomic) bool avantPremier; @property (strong, nonatomic) NSString * date; @property (strong, nonatomic) NSString * formatEcran; @property (strong, nonatomic) NSString * display; @property (strong, nonatomic) NSMutableArray * seances; @property (strong, nonatomic) NSString * version; -(BOOL) isToday; -(BOOL) isMoreThanToday; @end ================================================ FILE: ociney/src/Modele/Horaires.m ================================================ // // Horaires.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Horaires.h" @implementation Horaires -(id)init { if(self = [super init]) { self.seances = [NSMutableArray array]; } return self; } +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } -(BOOL) isToday { // Convert string to date object NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"yyy-MM-dd"]; NSDate *date = [dateFormat dateFromString:self.date]; return [[NSCalendar currentCalendar] isDateInToday:date]; // NSDate * now = [[NSDate alloc]init]; // return ([now compare:date] == NSOrderedSame); } -(BOOL) isMoreThanToday { NSInteger firstSpace = [self.date rangeOfString:@" "].location; self.date = [self.date substringFromIndex:firstSpace+1]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"dd MMMMM yyyy"]; dateFormat.locale = [NSLocale localeWithLocaleIdentifier:@"fr_FR"]; NSDate *date = [dateFormat dateFromString:self.date]; BOOL more = [date compare:[NSDate date]] == NSOrderedDescending; return more; } @end ================================================ FILE: ociney/src/Modele/Link.h ================================================ // // Link.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface Link :JSONModel @property (strong, nonatomic) NSString* rel; @property (strong, nonatomic) NSString* href; @property (strong, nonatomic) NSString* name; @end ================================================ FILE: ociney/src/Modele/Link.m ================================================ // // Link.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Link.h" @implementation Link +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Media.h ================================================ // // Media.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Version.h" #import "ModelObject.h" #import "Thumbnail.h" #import "Statistics.h" #import "Link.h" #import "Rendition.h" #import "Subject.h" @interface Media : JSONModel //@SerializedName("class") @property (strong, nonatomic) NSString* _class; @property (assign, nonatomic) int code; @property (strong, nonatomic) NSString* title; @property (strong, nonatomic) Thumbnail* thumbnail; @property (strong, nonatomic) NSArray* rendition; @property (strong, nonatomic) ModelObject* type; @property (strong, nonatomic) Version* version; @property (assign, nonatomic) int runtime; @property (strong, nonatomic) Statistics* statistics; @property (strong, nonatomic) NSArray* link; @property (strong, nonatomic) NSArray* subject; @end ================================================ FILE: ociney/src/Modele/Media.m ================================================ // // Media.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Media.h" @implementation Media +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } +(JSONKeyMapper*)keyMapper { return [[JSONKeyMapper alloc] initWithDictionary:@{ @"class": @"_class", @"release":@"_release" }]; } @end ================================================ FILE: ociney/src/Modele/ModelObject.h ================================================ // // ModelObject.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface ModelObject : JSONModel @property (assign, nonatomic) int code; @property (strong, nonatomic) NSString* value; @property (strong, nonatomic) NSString* $; @property (assign, nonatomic) int p; @property (assign, nonatomic) double note; @property (strong, nonatomic) NSString* type; @end ================================================ FILE: ociney/src/Modele/ModelObject.m ================================================ // // ModelObject.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "ModelObject.h" @implementation ModelObject +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Movie.h ================================================ // // Movie.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Horaires.h" #import "Media.h" #import "MovieType.h" #import "ModelObject.h" #import "Release.h" #import "CastingShort.h" #import "Trailer.h" #import "Link.h" #import "Statistics.h" #import "Poster.h" #import "News.h" #import "CastMember.h" #import "Feature.h" #import "Trivium.h" #import "HelpfulPositiveReview.h" #import "HelpfulNegativeReview.h" #import "DefaultMedia.h" #import "Media.h" #import "Protocole.h" #import "Horaires.h" @class MovieType; @class DefaultMedia; @interface Movie : JSONModel @property (strong, nonatomic) NSMutableArray * horaires; @property (strong, nonatomic) NSArray * bandesAnnonces; @property (strong, nonatomic) NSString * duree; @property (strong, nonatomic) NSString * genres; @property (assign, nonatomic) int code; @property (strong, nonatomic) NSString * originalTitle; @property (strong, nonatomic) MovieType * movieType; @property (strong, nonatomic) NSString * title; @property (assign, nonatomic) int productionYear; @property (strong, nonatomic) NSArray * nationality; @property (strong, nonatomic) NSArray * genre; @property (strong, nonatomic) Release * _release; @property (strong, nonatomic) ModelObject * color; @property (strong, nonatomic) NSArray * language; @property (strong, nonatomic) CastingShort * CastingShort; @property (strong, nonatomic) Trailer * trailer; @property (strong, nonatomic) NSString * trailerEmbed; @property (strong, nonatomic) NSArray * link; @property (strong, nonatomic) Statistics * statistics; @property (strong, nonatomic) NSString * synopsis; @property (strong, nonatomic) NSString * synopsisShort; @property (strong, nonatomic) NSString * keywords; @property (assign, nonatomic) int runtime; @property (strong, nonatomic) Poster * poster; @property (strong, nonatomic) NSArray * castMember; @property (assign, nonatomic) int hasBluRay; @property (assign, nonatomic) int hasDVD; @property (assign, nonatomic) int hasShowtime; @property (strong, nonatomic) NSString * dvdReleaseDate; @property (strong, nonatomic) NSString * bluRayReleaseDate; @property (strong, nonatomic) NSArray * news; @property (strong, nonatomic) NSArray * feature; @property (strong, nonatomic) NSArray * trivia; @property (strong, nonatomic) NSArray * helpfulPositiveReview; @property (strong, nonatomic) NSArray * helpfulNegativeReview; @property (strong, nonatomic) DefaultMedia * defaultMedia; @property (strong, nonatomic) NSArray * media; -(NSString *) getGenres; -(NSString *) getDuree; -(CastMember *) getRealisateur; -(BOOL) sameTitleAndOriginalTitle; -(NSArray *)getCastMember:(int)number; -(NSString *) getSynopsisShort; -(NSString *) getSynopsis; -(NSMutableArray *) getUrlImages; -(BOOL)isVF; -(BOOL)isVO; -(BOOL)is2D; -(BOOL)is3D; @end ================================================ FILE: ociney/src/Modele/Movie.m ================================================ // // Movie.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Movie.h" #import "ModelObject.h" @implementation Movie +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } -(NSString *) getDuree{ if(self.duree == nil){ int heures = (int) (self.runtime/3600); int minutes = (self.runtime / 60 - heures * 60); self.duree = [NSString stringWithFormat:@"%ih",heures]; if(minutes<10) self.duree = [self.duree stringByAppendingString:@"0"]; self.duree = [self.duree stringByAppendingString:[NSString stringWithFormat:@"%imin",minutes]]; } return self.duree; } -(NSMutableArray *) getUrlImages { NSMutableArray * urlImages = [[NSMutableArray alloc]init]; for(Media * m in self.media){ if(m.thumbnail != nil && m.thumbnail.href != nil) [urlImages addObject:m.thumbnail.href]; } return urlImages; } -(NSString *) getGenres{ if(self.genres == nil){ NSString * sb = @""; int size = (int)[self.genre count]; if(size > 3) size = 3; ModelObject * value; for (int i = 0; i < size; ++i) { value = [self.genre objectAtIndex:i]; sb = [sb stringByAppendingString:value.$]; if(i < size - 1) sb = [sb stringByAppendingString:@" / "]; } self.genres = sb; } return self.genres; } +(JSONKeyMapper*)keyMapper { return [[JSONKeyMapper alloc] initWithDictionary:@{ @"class": @"_class", @"release":@"_release" }]; } -(CastMember *) getRealisateur { for (CastMember * m in self.castMember) { @try { if([m.activity.$ containsString:@"Réalisateur"]) return m; } @catch (NSException * e) { NSLog(@"Exception: %@", e); } } return nil; } -(BOOL) sameTitleAndOriginalTitle { if (self.title != nil) return [self.title isEqualToString:self.originalTitle]; else return false; } -(NSArray *)getCastMember:(int)number { NSMutableArray * cast = [[NSMutableArray alloc]init]; int i = 0; for (CastMember * m in self.castMember) { if (![m.activity.$ containsString:@"Réalisateur"]) { [cast addObject:m]; i++; } if (i == number) break; } return cast; } -(NSString *) getSynopsis { NSString * s = self.synopsis; if (s != nil) { s = [s stringByReplacingOccurrencesOfString:@"
" withString:@"\n"]; s = [s stringByReplacingOccurrencesOfString:@"
" withString:@"\n"]; NSRange r; while ((r = [s rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound) s = [s stringByReplacingCharactersInRange:r withString:@""]; } return s; } -(NSString *) getSynopsisShort { NSString * s = self.synopsisShort; if (s != nil) { s = [s stringByReplacingOccurrencesOfString:@"
" withString:@"\n"]; s = [s stringByReplacingOccurrencesOfString:@"
" withString:@"\n"]; s = [s stringByReplacingOccurrencesOfString:@"\\<[^>]*>" withString:@""]; } return s; } -(BOOL)isVF { return YES; } -(BOOL)isVO { if (self.language != nil) { for (ModelObject* lanquage in self.language) { if (![@"Français" isEqualToString:lanquage.$]) return YES; } } return NO; } -(BOOL)is2D { return YES; } -(BOOL)is3D { if (self._release != nil && self._release.releaseVersion != nil && [self._release.releaseVersion.$ containsString:@"3D"]) return YES; return NO; } @end ================================================ FILE: ociney/src/Modele/MovieShowtime.h ================================================ // // MovieShowtime.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "OnShow.h" #import "Version.h" #import "ModelObject.h" #import "Scr.h" #import "Protocole.h" @interface MovieShowtime : JSONModel @property (strong, nonatomic) NSString* preview; @property (strong, nonatomic) NSString* releaseWeek; @property (strong, nonatomic) OnShow* onShow; @property (strong, nonatomic) Version* version; @property (strong, nonatomic) ModelObject* screenFormat; @property (strong, nonatomic) NSString* display; @property (strong, nonatomic) NSArray* scr; @end ================================================ FILE: ociney/src/Modele/MovieShowtime.m ================================================ // // MovieShowtime.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "MovieShowtime.h" @implementation MovieShowtime +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/MovieType.h ================================================ // // MovieType.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "DefaultMedia.h" #import "Protocole.h" @class DefaultMedia; @interface MovieType : JSONModel @property (strong, nonatomic) DefaultMedia* defaultMedia; @end ================================================ FILE: ociney/src/Modele/MovieType.m ================================================ // // MovieType.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "MovieType.h" @implementation MovieType +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Name.h ================================================ // // Name.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface Name : JSONModel @property (strong, nonatomic) NSString * given; @property (strong, nonatomic) NSString * family; -(NSString*)getName; @end ================================================ FILE: ociney/src/Modele/Name.m ================================================ // // Name.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Name.h" @implementation Name +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } -(NSString*)getName { return [NSString stringWithFormat:@"%@ %@",self.given,self.family]; } @end ================================================ FILE: ociney/src/Modele/News.h ================================================ // // News.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Publication.h" #import "Picture.h" #import "ModelObject.h" #import "Protocole.h" @interface News : JSONModel @property (assign, nonatomic) int code; @property (strong, nonatomic) Publication* publication; @property (strong, nonatomic) NSString* title; @property (strong, nonatomic) Picture* picture; @property (strong, nonatomic) NSArray* category; @end ================================================ FILE: ociney/src/Modele/News.m ================================================ // // News.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "News.h" @implementation News +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/NewsSource.h ================================================ // // NewsSource.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface NewsSource : NSObject @property (assign, nonatomic) int code; @property (strong, nonatomic) NSString* name; @property (strong, nonatomic) NSString* href; @end ================================================ FILE: ociney/src/Modele/NewsSource.m ================================================ // // NewsSource.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "NewsSource.h" @implementation NewsSource +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/OnShow.h ================================================ // // OnShow.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Movie.h" @interface OnShow : JSONModel @property (strong, nonatomic) Movie* movie; @end ================================================ FILE: ociney/src/Modele/OnShow.m ================================================ // // OnShow.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OnShow.h" @implementation OnShow +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Participation.h ================================================ // // Participation.h // ociney // // Created by florent champigny on 23/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Movie.h" #import "ModelObject.h" @protocol Participation @end @interface Participation : JSONModel @property (strong, nonatomic) Movie* movie; @property (strong, nonatomic) ModelObject* activity; @property (strong, nonatomic) NSString* role; @end ================================================ FILE: ociney/src/Modele/Participation.m ================================================ // // Participation.m // ociney // // Created by florent champigny on 23/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Participation.h" @implementation Participation +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Person.h ================================================ // // Person.h // ociney // // Created by Kevin De Jesus Ferreira on 29/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Protocole.h" #import "Picture.h" #import "Link.h" #import "News.h" #import "Feature.h" #import "Media.h" #import "Statistics.h" #import "Participation.h" @class ModelObject; @interface Person : JSONModel @property (strong, nonatomic) NSArray * activity; @property (assign, nonatomic) int code; @property (assign, nonatomic) int gender; @property (strong, nonatomic) NSArray * nationality; @property (strong, nonatomic) NSString * activityShort; @property (strong, nonatomic) NSString * biographyShort; @property (strong, nonatomic) NSString * biography; @property (strong, nonatomic) NSString * birthDate; @property (strong, nonatomic) NSString * birthPlace; @property (strong, nonatomic) Picture * picture; @property (strong, nonatomic) NSString * trailerEmbed; @property (assign, nonatomic) int hasTopFilmography; @property (strong, nonatomic) NSArray * participation; @property (strong, nonatomic) NSArray * media; @property (strong, nonatomic) NSArray * link; @property (strong, nonatomic) NSArray * news; @property (strong, nonatomic) NSArray * feature; @property (strong, nonatomic) Statistics * statistics; -(NSString*)getFullName; @end ================================================ FILE: ociney/src/Modele/Person.m ================================================ // // Person.m // ociney // // Created by Kevin De Jesus Ferreira on 29/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Person.h" @implementation Person +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } -(NSString*)getFullName { NSString * name = @""; return name; } @end ================================================ FILE: ociney/src/Modele/PersonFull.h ================================================ // // PersonFull.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Name.h" #import "ModelObject.h" #import "Person.h" @interface PersonFull : Person @property (strong, nonatomic) Name * name; @property (strong, nonatomic) NSArray * activity; -(NSString *) getActivities; -(NSString*)getFullName; +(NSArray *)transformListFull:(NSArray *)persons; @end ================================================ FILE: ociney/src/Modele/PersonFull.m ================================================ // // PersonFull.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "PersonFull.h" #import "PersonSmall.h" @implementation PersonFull +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } -(NSString *) getActivities { NSString * activities = @""; int i = 0; if([self.activity count] > 0){ for(ModelObject *act in self.activity){ if(i != 0) activities = [activities stringByAppendingString:@" / "]; activities = [activities stringByAppendingString:act.$]; i++; } }else{ if(self.activityShort != nil){ NSString * s = self.activityShort; return [s stringByReplacingOccurrencesOfString:@"," withString:@"/"]; } } return activities; } -(NSString*)getFullName { NSString * name = @""; if(self.name.given !=nil) name = [NSString stringWithFormat:@"%@ ",self.name.given]; if(self.name.family !=nil) name = [name stringByAppendingString:self.name.family]; return name; } +(NSArray *)transformListFull:(NSArray *)persons{ NSMutableArray * listFull = [[NSMutableArray alloc]init]; for(PersonSmall * p in persons) [listFull addObject:[PersonFull transformFull:p]]; return listFull; } +(PersonFull *) transformFull:(PersonSmall *)person{ PersonFull * p = [[PersonFull alloc]init]; p.activity = person.activity; p.code = person.code; p.picture = person.picture; p.statistics = person.statistics; Name * name = [[Name alloc]init]; name.family = person.name; name.given = @""; p.name = name; return p; } @end ================================================ FILE: ociney/src/Modele/PersonSmall.h ================================================ // // PersonSmall.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Protocole.h" #import "Statistics.h" #import "Picture.h" @interface PersonSmall : JSONModel @property (strong, nonatomic) NSString* name; @property (strong, nonatomic) NSArray* activity; @property (assign, nonatomic) int code; @property (strong, nonatomic) Statistics * statistics; @property (assign, nonatomic) int gender; @property (strong, nonatomic) NSArray * nationality; @property (strong, nonatomic) NSString * activityShort; @property (strong, nonatomic) NSString * biographyShort; @property (strong, nonatomic) NSString * biography; @property (strong, nonatomic) NSString * birthDate; @property (strong, nonatomic) NSString * birthPlace; @property (strong, nonatomic) Picture * picture; @property (strong, nonatomic) NSString * trailerEmbed; @property (assign, nonatomic) int hasTopFilmography; @property (strong, nonatomic) NSArray * media; @property (strong, nonatomic) NSArray * link; @property (strong, nonatomic) NSArray * news; @property (strong, nonatomic) NSArray * feature; -(NSString*)getFullName; @end ================================================ FILE: ociney/src/Modele/PersonSmall.m ================================================ // // PersonSmall.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "PersonSmall.h" @implementation PersonSmall +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } -(NSString*)getFullName { return self.name; } @end ================================================ FILE: ociney/src/Modele/Picture.h ================================================ // // Picture.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface Picture : JSONModel @property (strong, nonatomic) NSString* path; @property (strong, nonatomic) NSString* href; @property (strong, nonatomic) NSString* name; @end ================================================ FILE: ociney/src/Modele/Picture.m ================================================ // // Picture.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Picture.h" @implementation Picture +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Place.h ================================================ // // Place.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Theater.h" #import "Protocole.h" @class Theater; @interface Place : JSONModel @property (strong, nonatomic) Theater* theater; @end ================================================ FILE: ociney/src/Modele/Place.m ================================================ // // Place.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Place.h" @implementation Place +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Poster.h ================================================ // // Poster.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface Poster : JSONModel @property (strong, nonatomic) NSString* name; @property (strong, nonatomic) NSString* path; @property (strong, nonatomic) NSString* href; @end ================================================ FILE: ociney/src/Modele/Poster.m ================================================ // // Poster.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Poster.h" @implementation Poster +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Protocole.h ================================================ // // Whatter.h // WhatWhat // // Created by Florent Champigny on 14/08/2014. // Copyright (c) 2014 Florent Champigny. All rights reserved. // @protocol Link @end @protocol Rendition @end @protocol Subject @end @protocol ModelObject @end @protocol Horaires @end @protocol Media @end @protocol News @end @protocol Feature @end @protocol Trivium @end @protocol HelpfulPositiveReview @end @protocol HelpfulNegativeReview @end @protocol CastMember @end @protocol Movie @end @protocol TheaterShowtime @end @protocol Theater @end @protocol Review @end @protocol Scr @end @protocol MovieShowtime @end @protocol Place @end @protocol PersonFull @end @protocol PersonSmall @end ================================================ FILE: ociney/src/Modele/Publication.h ================================================ // // Publication.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface Publication : JSONModel @property (strong, nonatomic) NSString * dateStart; @end ================================================ FILE: ociney/src/Modele/Publication.m ================================================ // // Publication.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Publication.h" @implementation Publication +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Release.h ================================================ // // Release.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "ModelObject.h" #import "Distributor.h" @interface Release : JSONModel @property (strong, nonatomic) NSString* releaseDate; @property (strong, nonatomic) ModelObject* country; @property (strong, nonatomic) ModelObject* releaseState; @property (strong, nonatomic) ModelObject* releaseVersion; @property (strong, nonatomic) Distributor* distributor; -(NSString *)getReleaseDate; @end ================================================ FILE: ociney/src/Modele/Release.m ================================================ // // Release.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Release.h" @implementation Release +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } +(JSONKeyMapper*)keyMapper { return [[JSONKeyMapper alloc] initWithDictionary:@{ @"release":@"_release" }]; } -(NSString *)getReleaseDate{ @try { NSArray * releaseCut = [self.releaseDate componentsSeparatedByString: @"-"]; return [NSString stringWithFormat:@"%@/%@/%@",[releaseCut objectAtIndex:2],[releaseCut objectAtIndex:1],[releaseCut objectAtIndex:0]]; } @catch (NSException *exception) { return self.releaseDate; } } @end ================================================ FILE: ociney/src/Modele/Rendition.h ================================================ // // Rendition.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "ModelObject.h" #import "Publication.h" @interface Rendition : JSONModel @property (assign, nonatomic) int code; @property (strong, nonatomic) NSString * href; @property (strong, nonatomic) Publication * publication; @property (strong, nonatomic) ModelObject * bandwidth; @property (strong, nonatomic) ModelObject * format; @property (strong, nonatomic) ModelObject * encodingProfile; @property (assign, nonatomic) int width; @property (assign, nonatomic) int height; @property (assign, nonatomic) int size; @end ================================================ FILE: ociney/src/Modele/Rendition.m ================================================ // // Rendition.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Rendition.h" @implementation Rendition +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Review.h ================================================ // // Review.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Writer.h" #import "Subject.h" #import "ModelObject.h" #import "Link.h" #import "NewsSource.h" @interface Review : JSONModel @property (assign, nonatomic) int code; @property (strong, nonatomic) NSString* creationDate; @property (strong, nonatomic) ModelObject* type; @property (strong, nonatomic) Subject* subject; @property (strong, nonatomic) NewsSource* newsSource; @property (strong, nonatomic) NSString* author; @property (strong, nonatomic) Link* reviewUrl; @property (strong, nonatomic) NSString* body; @property (assign, nonatomic) double rating; @property (strong, nonatomic) Writer* writer; @end ================================================ FILE: ociney/src/Modele/Review.m ================================================ // // Review.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Review.h" @implementation Review +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Scr.h ================================================ // // Scr.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "ModelObject.h" #import "Protocole.h" @interface Scr : JSONModel @property (strong, nonatomic) NSString* d; @property (strong, nonatomic) NSArray* t; @end ================================================ FILE: ociney/src/Modele/Scr.m ================================================ // // Scr.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Scr.h" @implementation Scr +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Statistics.h ================================================ // // Statistics.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "ModelObject.h" #import "Protocole.h" @interface Statistics : JSONModel @property (assign, nonatomic) int viewCount; @property (assign, nonatomic) double userRating; @property (assign, nonatomic) int userReviewCount; @property (assign, nonatomic) double pressRating; @property (assign, nonatomic) int pressReviewCount; @property (assign, nonatomic) int userRatingCount; @property (assign, nonatomic) int movieCount; @property (assign, nonatomic) int movieActorCount; @property (assign, nonatomic) int movieDirectorCount; @property (assign, nonatomic) int seriesCount; @property (assign, nonatomic) int seriesActorCount; @property (assign, nonatomic) int seriesDirectorCount; @property (assign, nonatomic) int seriesProducerCount; @property (assign, nonatomic) int rankTopStar; @property (assign, nonatomic) int variationTopStar; @property (assign, nonatomic) int careerDuration; @property (assign, nonatomic) int editorialRatingCount; @property (assign, nonatomic) int commentCount; @property (assign, nonatomic) int photoCount; @property (assign, nonatomic) int videoCount; @property (assign, nonatomic) int triviaCount; @property (assign, nonatomic) int newsCount; @property (assign, nonatomic) int rankTopMovie; @property (assign, nonatomic) int variationTopMovie; @property (assign, nonatomic) int awardCount; @property (assign, nonatomic) int nominationCount; @property (assign, nonatomic) int fanCount; @property (assign, nonatomic) int wantToSeeCount; @property (assign, nonatomic) int releaseWeekPosition; @property (assign, nonatomic) int theaterCount; @property (assign, nonatomic) int theaterCountOnRelease; @property (strong, nonatomic) NSArray* rating; @end ================================================ FILE: ociney/src/Modele/Statistics.m ================================================ // // Statistics.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Statistics.h" @implementation Statistics +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Subject.h ================================================ // // Subject.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Movie.h" @interface Subject : JSONModel //@property (strong, nonatomic) Movie* movie; @end ================================================ FILE: ociney/src/Modele/Subject.m ================================================ // // Subject.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Subject.h" @implementation Subject +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Theater.h ================================================ // // Theater.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "TheaterShowtime.h" #import "Horaires.h" #import "Geoloc.h" #import "Picture.h" #import "ModelObject.h" #import "Protocole.h" @interface Theater : JSONModel @property (strong, nonatomic) NSMutableArray * showTimes; @property (strong, nonatomic) NSMutableArray * horaires; @property (strong, nonatomic) NSMutableArray * horairesSemaineJours; @property (strong, nonatomic) NSMutableDictionary* horairesSemaine; @property (strong, nonatomic) NSString* code; @property (assign, nonatomic) double distance; @property (strong, nonatomic) NSString* name; @property (strong, nonatomic) NSString* address; @property (strong, nonatomic) NSString* postalCode; @property (strong, nonatomic) NSString* city; @property (strong, nonatomic) Geoloc* geoloc; @property (strong, nonatomic) Picture* picture; @property (strong, nonatomic) NSArray * link; @property (strong, nonatomic) ModelObject* cinemaChain; @property (assign, nonatomic) int screenCount; @property (assign, nonatomic) int hasPRMAccess; -(void)getShowTimes:(NSString*)idMovie; @end ================================================ FILE: ociney/src/Modele/Theater.m ================================================ // // Theater.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Theater.h" #define TRIM stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] @implementation Theater -(id)init { if(self = [super init]) { self.showTimes = (NSMutableArray*)[NSMutableArray array]; self.horaires = (NSMutableArray *)[NSMutableArray array]; self.horairesSemaine = [NSMutableDictionary dictionary]; self.horairesSemaineJours = [NSMutableArray array]; } return self; } +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } -(void)getShowTimes:(NSString*)idMovie { self.horairesSemaine = [NSMutableDictionary dictionary];; self.horairesSemaineJours = [NSMutableArray array]; for (TheaterShowtime *t in self.showTimes) { if (t.movieShowtimes != nil) for (MovieShowtime *mst in t.movieShowtimes) { BOOL avantPremiere = [mst.preview isEqualToString:@"true"]; NSString* formatEcran = nil; if (mst.screenFormat != nil) formatEcran = mst.screenFormat.$; NSString* version = mst.version.$; //NSString* display = mst.display; if (mst.onShow.movie.code == [idMovie intValue]) { if (mst.display != nil && mst.display.length != 0) { NSArray* joursHorraires = [mst.display componentsSeparatedByString:@"Séances du"]; for (int i = 0; i < joursHorraires.count; i++) { if (joursHorraires != nil && joursHorraires.count > 0) { @try { NSArray* jrs = [joursHorraires[i] componentsSeparatedByString:@" : " ]; if (jrs.count > 1) { NSString* jour = [jrs[0] TRIM]; NSString* hrs = [jrs[1] TRIM]; Horaires* horaires = [[Horaires alloc] init]; horaires.avantPremier = avantPremiere; horaires.display = mst.display; if (mst.screenFormat != nil) horaires.formatEcran = mst.screenFormat.$; horaires.version = version; horaires.date = jour; if ([horaires isMoreThanToday]) { NSArray* horairesLignes = [hrs componentsSeparatedByString:@","]; for (int j = 0; j < horairesLignes.count; ++j) { NSString* horraire = [horairesLignes[j] TRIM]; horraire = [[horraire componentsSeparatedByString:@" "][0] TRIM]; [horaires.seances addObject:horraire]; } if (self.horairesSemaine[jour] != nil) { [self.horairesSemaine[jour] addObject:horaires]; } else { NSMutableArray *horairesDuJour = [NSMutableArray array]; [horairesDuJour addObject:horaires]; [self.horairesSemaineJours addObject:jour]; self.horairesSemaine[jour] = horairesDuJour; } } } } @catch (NSException* e) { } } } } } } } } @end ================================================ FILE: ociney/src/Modele/TheaterShowtime.h ================================================ // // TheaterShowtime.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Place.h" #import "MovieShowtime.h" #import "Protocole.h" #import "Theater.h" @class Place; @interface TheaterShowtime : JSONModel @property (strong, nonatomic) Place* place; @property (strong, nonatomic) NSArray * movieShowtimes; +(NSArray *) getMovies:(NSArray *) showTimes andTheather:(NSObject *)cinema; @end ================================================ FILE: ociney/src/Modele/TheaterShowtime.m ================================================ // // TheaterShowtime.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "TheaterShowtime.h" @implementation TheaterShowtime +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } +(NSArray *) getMovies:(NSArray *) showTimes andTheather:(Theater *)cinema { NSMutableDictionary * movies = [[NSMutableDictionary alloc]init]; @try { for (TheaterShowtime * t in showTimes) { if (t.movieShowtimes != nil) for (MovieShowtime * mst in t.movieShowtimes) { BOOL avantPremiere = [mst.preview isEqualToString:@"true"]; NSString * version = mst.version.$; NSString * screenFormat = mst.screenFormat.$; if (cinema != nil) cinema.showTimes = (NSMutableArray *)[NSMutableArray arrayWithArray:showTimes]; if (mst.onShow != nil && mst.onShow.movie != nil) { Movie * movie = mst.onShow.movie; movie.horaires = (NSMutableArray*)[NSMutableArray array]; if ([movies objectForKey:[NSString stringWithFormat:@"%i",movie.code]] == nil){ [movies setObject:movie forKey:[NSString stringWithFormat:@"%i",movie.code]]; }else { movie = [movies objectForKey:[NSString stringWithFormat:@"%i",movie.code]]; } Scr * scr = [mst.scr objectAtIndex:0]; if (scr.t != nil) { Horaires * h = [[Horaires alloc]init]; h.date = scr.d; h.formatEcran = screenFormat; h.version = version; h.avantPremier = avantPremiere; h.display =mst.display; h.seances = [[NSMutableArray alloc]init]; for (ModelObject * s in scr.t) { [h.seances addObject:s.$]; } [movie.horaires addObject:h]; } } } } } @catch (NSException * e) { NSLog(@"Exception: %@", e); } return [movies allValues]; } @end ================================================ FILE: ociney/src/Modele/Thumbnail.h ================================================ // // Thumbnail.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface Thumbnail : JSONModel @property (strong, nonatomic) NSString* href; @end ================================================ FILE: ociney/src/Modele/Thumbnail.m ================================================ // // Thumbnail.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Thumbnail.h" @implementation Thumbnail +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Trailer.h ================================================ // // Trailer.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface Trailer : JSONModel @property (strong, nonatomic) NSString* name; @property (assign, nonatomic) int code; @property (strong, nonatomic) NSString* href; @end ================================================ FILE: ociney/src/Modele/Trailer.m ================================================ // // Trailer.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Trailer.h" @implementation Trailer +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Trivium.h ================================================ // // Trivium.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" #import "Publication.h" @interface Trivium : JSONModel @property (assign, nonatomic) int code; @property (strong, nonatomic) Publication* publication; @property (strong, nonatomic) NSString* title; @property (strong, nonatomic) NSString* body; @end ================================================ FILE: ociney/src/Modele/Trivium.m ================================================ // // Trivium.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Trivium.h" @implementation Trivium +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Version.h ================================================ // // Version.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface Version : JSONModel @property (strong, nonatomic) NSString* original; @property (assign, nonatomic) int code; @property (assign, nonatomic) int lang; @property (strong, nonatomic) NSString* $; @end ================================================ FILE: ociney/src/Modele/Version.m ================================================ // // Version.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Version.h" @implementation Version +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Modele/Writer.h ================================================ // // Writer.h // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "JSONModel.h" @interface Writer : JSONModel @property (strong, nonatomic) NSString* code; @property (strong, nonatomic) NSString* name; @property (strong, nonatomic) NSString* avatar; @end ================================================ FILE: ociney/src/Modele/Writer.m ================================================ // // Writer.m // ociney // // Created by Kevin De Jesus Ferreira on 27/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "Writer.h" @implementation Writer +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end ================================================ FILE: ociney/src/Service/AllocineService.h ================================================ // // Service.h // WhatWhat // // Created by Florent Champigny on 14/08/2014. // Copyright (c) 2014 Florent Champigny. All rights reserved. // #import #import #define ALLOCINE_PARTNER_KEY @"100043982026" #define ALLOCINE_SECRET_KEY @"29d185d98c984a359e6e6f26a0474269" #define APP_ID @"27405" #define FORMAT_JSON @"json" #define URL @"http://api.allocine.fr/rest/v3" #define USER_AGENT @"Dalvik/1.6.0 (Linux; U; Android 4.2.2; Nexus 4 Build/JDQ39E)" #define PARTNER @"partner" #define CODE @"code" #define COUNT @"count" #define ORDER @"order" #define FILTER @"filter" #define FORMAT @"format" #define SED @"sed" #define SIG @"sig" #define Q @"q" #define PAGE @"page" #define PROFILE @"profile" #define ZIP @"zip" #define LAT @"lat" #define LONG @"long" #define RADIUS @"radius" #define THEATER @"theater" #define LOCATION @"location" #define TYPE @"type" #define MOVIE @"movie" #define DATE @"date" #define THEATERS @"theaters" #define SUBJECT @"subject" #define MEDIAFMT @"mediafmt" @protocol ServiceDelegate -(void)donneesRecues:(NSString*)donnees andStatusCode:(NSInteger)statusCode andError:(NSError*)error; @end @interface AllocineService : NSObject -(id)initWithDelegate:(id) serviceDelegate; @property (strong, nonatomic) id serviceDelegate; -(void)movie:(NSArray *)parametres; -(void)person:(NSArray *)parametres; -(void)movielist:(NSArray *)parametres; -(void)personList:(NSArray *)parametres; -(void)search:(NSArray *)paramsArray; -(void)theaterlist:(NSArray *)paramsArray; -(void)showtimelistForTheater:(NSArray *)showtimelistForTheater; -(void)showtimelistForTheaterAndMovie:(NSArray *)paramsArray; -(void)showtimelistWithLatLngAndMovie:(NSArray *)paramsArray; -(void)videoList:(NSArray *)parametres; @end ================================================ FILE: ociney/src/Service/AllocineService.m ================================================ // // Service.m // WhatWhat // // Created by Florent Champigny on 14/08/2014. // Copyright (c) 2014 Florent Champigny. All rights reserved. // #import "AllocineService.h" #import "JSONHTTPClient.h" #import "ServiceSecurity.h" #define ENPOINT @"http://api.allocine.fr/rest/v3" NSString* urlWebService(NSString* end){ return [NSString stringWithFormat:@"%@%@",ENPOINT,end]; } NSString* intToString(NSInteger i){ return [NSString stringWithFormat:@"%ld",(long)i]; } @implementation AllocineService -(id)initWithDelegate:(id) serviceDelegate{ if(self = [super init]){ self.serviceDelegate = serviceDelegate; // self.session = [[SessionManager alloc] init]; } return self; } -(void)POST:(NSString*)url parameters:(id)parameters { [self POST_AFNETWORKING:urlWebService(url) parameters:parameters]; } -(void)POST_AFNETWORKING:(NSString*)url parameters:(id)parameters { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]]; [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain",@"application/json",@"text/html",nil]; [manager POST:url parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *response = [operation responseString]; if(self.serviceDelegate != nil) [self.serviceDelegate donneesRecues:response andStatusCode:operation.response.statusCode andError:nil]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if(self.serviceDelegate != nil) [self.serviceDelegate donneesRecues:nil andStatusCode:operation.response.statusCode andError:error]; }]; } -(void)GET:(NSString*)url parameters:(id)parameters andConstruireParams:(BOOL)construire { if(parameters != nil && [parameters isKindOfClass:[NSArray class]]){ NSArray *paramsArray = (NSArray*)parameters; NSString * parametres = [ServiceSecurity construireParams:construire andParams:paramsArray]; NSString * sed = [ServiceSecurity getSed]; NSString * sig = [ServiceSecurity getSIG:parametres andSed:sed]; NSString * p = [NSString stringWithFormat:@"%@&sed=%@&sig=%@",parametres,sed,sig]; url = [NSString stringWithFormat:@"/%@?%@",url,p]; url = urlWebService(url); [self GET_AFNETWORKING:url parameters:nil]; } else [self GET_AFNETWORKING:urlWebService(url) parameters:parameters]; } -(void)GET_AFNETWORKING:(NSString*)url parameters:(id)parameters { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]]; [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain",@"application/json",@"text/html",nil]; [manager GET: url parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { if(self.serviceDelegate != nil){ NSString *reponseString = operation.responseString; [self.serviceDelegate donneesRecues: reponseString andStatusCode:operation.response.statusCode andError:nil]; } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if(self.serviceDelegate != nil) [self.serviceDelegate donneesRecues:nil andStatusCode:operation.response.statusCode andError:error]; }]; } -(void)movielist:(NSArray *)paramsArray { [self GET:@"movielist" parameters:paramsArray andConstruireParams:YES ]; } -(void)theaterlist:(NSArray *)paramsArray { [self GET:@"theaterlist" parameters:paramsArray andConstruireParams:YES ]; } -(void)showtimelistForTheater:(NSArray *)paramsArray { [self GET:@"showtimelist" parameters:paramsArray andConstruireParams:NO ]; } -(void)personList:(NSArray *)paramsArray { [self GET:@"personList" parameters:paramsArray andConstruireParams:YES ]; } -(void)movie:(NSArray *)paramsArray { [self GET:@"movie" parameters:paramsArray andConstruireParams:NO ]; } -(void)videoList:(NSArray *)paramsArray{ [self GET:@"videolist" parameters:paramsArray andConstruireParams:NO ]; } -(void)person:(NSArray *)paramsArray { [self GET:@"person" parameters:paramsArray andConstruireParams:NO ]; } -(void)search:(NSArray *)paramsArray { [self GET:@"search" parameters:paramsArray andConstruireParams:YES ]; } -(void)showtimelistForTheaterAndMovie:(NSArray *)paramsArray { [self GET:@"showtimelist" parameters:paramsArray andConstruireParams:YES ]; } -(void)showtimelistWithLatLngAndMovie:(NSArray *)paramsArray { [self GET:@"showtimelist" parameters:paramsArray andConstruireParams:YES ]; } @end ================================================ FILE: ociney/src/Service/ServiceSecurity.h ================================================ // // ServiceSecurity.h // ociney // // Created by Kevin De Jesus Ferreira on 25/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import @interface ServiceSecurity : NSObject +(NSString *)sha1:(NSString *)str; +(NSString *) getSed; +(NSString *) getSIG:(NSString *)params andSed:(NSString *)sed; +(NSString *) construireParams:(BOOL)ajouterCode andParams:(NSArray *)params; +(NSString *) applatir:(NSArray *)liste; @end ================================================ FILE: ociney/src/Service/ServiceSecurity.m ================================================ // // ServiceSecurity.m // Ociney // // Created by Kevin De Jesus Ferreira on 25/10/2014. // #import "ServiceSecurity.h" #import #define ALLOCINE_SECRET_KEY @"29d185d98c984a359e6e6f26a0474269" #define PARTNER @"partner" #define ALLOCINE_PARTNER_KEY @"100043982026" #define CODE @"code" #define APP_ID @"27405" #define FORMAT_JSON @"json" #define FORMAT @"format" @implementation ServiceSecurity +(NSString *)sha1:(NSString *)str { unsigned char result[CC_SHA1_DIGEST_LENGTH]; const char *cStr = [str UTF8String]; CC_SHA1(cStr, (CC_LONG)strlen(cStr), result); NSData *pwHashData = [[NSData alloc] initWithBytes:result length: sizeof result]; NSString *base64 = [pwHashData base64EncodedStringWithOptions:0]; return base64; } +(NSString *) getSed{ NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"yyyyMMdd"]; return [dateFormat stringFromDate:[NSDate date]]; } +(NSString *) getSIG:(NSString *)params andSed:(NSString *)sed{ NSString * input = [NSString stringWithFormat:@"%@%@&sed=%@",ALLOCINE_SECRET_KEY,params,sed]; input = [input stringByReplacingOccurrencesOfString: @":" withString:@"%3A"]; input = [input stringByReplacingOccurrencesOfString: @"," withString:@"%2C"]; NSString * sha1 = [[NSString alloc]initWithString:[self sha1:input]]; NSString* newStr = [ServiceSecurity URLEncodedString_ch:sha1]; return newStr; } + (NSString *) URLEncodedString_ch:(NSString *)input { NSMutableString * output = [NSMutableString string]; const unsigned char * source = (const unsigned char *)[input UTF8String]; NSUInteger sourceLen = strlen((const char *)source); for (int i = 0; i < sourceLen; ++i) { const unsigned char thisChar = source[i]; if (thisChar == ' '){ [output appendString:@"+"]; } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' || (thisChar >= 'a' && thisChar <= 'z') || (thisChar >= 'A' && thisChar <= 'Z') || (thisChar >= '0' && thisChar <= '9')) { [output appendFormat:@"%c", thisChar]; } else { [output appendFormat:@"%%%02X", thisChar]; } } return output; } +(NSString *) applatir:(NSArray *)liste{ NSString * sb = @""; for(NSString * s in liste){ sb = [sb stringByAppendingString:@","]; sb = [sb stringByAppendingString:s]; } return sb; } +(NSString *) construireParams:(BOOL)ajouterCode andParams:(NSArray *)params{ NSMutableArray * ps = [[NSMutableArray alloc]init]; [ps addObject:PARTNER]; [ps addObject:ALLOCINE_PARTNER_KEY]; if (ajouterCode){ [ps addObject:CODE]; [ps addObject:APP_ID]; } [ps addObject:FORMAT]; [ps addObject:FORMAT_JSON]; [ps addObjectsFromArray:params]; NSString * sb = @""; for (int i = 0; i < [ps count]; i += 2) { if (i + 1 < [ps count]) { if (i != 0) sb = [sb stringByAppendingString:@"&"]; sb = [sb stringByAppendingString:[ps objectAtIndex:i]]; sb = [sb stringByAppendingString:@"="]; NSObject * value = [ps objectAtIndex:i+1]; if ([value isKindOfClass:[NSString class]]) sb = [sb stringByAppendingString:(NSString *)value]; else if ([value isKindOfClass:[NSArray class]]) { sb = [sb stringByAppendingString:[self applatir:(NSArray *)value]]; } } } return sb; } @end ================================================ FILE: ociney/src/Task/AsyncTask.h ================================================ // // AsyncTask.h // WhatWhat // // Created by Florent Champigny on 14/08/2014. // Copyright (c) 2014 Florent Champigny. All rights reserved. // #import #import "AllocineService.h" @class AsyncTask; @protocol AsyncTaskDelegate -(void)erreurReseau:(AsyncTask*)task; -(void)afficherChargement:(AsyncTask*)task afficher:(BOOL)afficher; @end @interface AsyncTask : NSObject @property (strong,nonatomic) AllocineService *service; @property (strong,nonatomic) id delegate; @property (assign,nonatomic) BOOL erreurReseau; -(id)initWithDelegate:(id)delegate; -(void)execute:(NSArray*)params; -(void)onPreExecute; #pragma mark - To implement -(void)doInBackground:(NSArray*)params; -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode; @end ================================================ FILE: ociney/src/Task/AsyncTask.m ================================================ // // AsyncTask.m // WhatWhat // // Created by Florent Champigny on 14/08/2014. // Copyright (c) 2014 Florent Champigny. All rights reserved. // #import "AsyncTask.h" @implementation AsyncTask -(id)initWithDelegate:(id)delegate{ if(self = [super init]){ self.delegate = delegate; self.service = [[AllocineService alloc] initWithDelegate:self]; } return self; } -(void)execute:(NSArray*)params{ [self onPreExecute]; [self doInBackground:params]; } -(void)onPreExecute{ if(self.delegate != nil) [self.delegate afficherChargement:self afficher:YES]; } -(void)donneesRecues:(NSString*)donnees andStatusCode:(NSInteger)statusCode andError:(NSError*)error{ if(error != nil){ self.erreurReseau = YES; } [self onPostExecuteOnMainThread:donnees statusCode:statusCode]; } -(void)onPostExecuteOnMainThread:(id)result statusCode:(NSInteger)statusCode{ dispatch_async(dispatch_get_main_queue(), ^{ [self onPostExecute:result statusCode:statusCode]; }); } -(void)doInBackground:(NSArray*)params{ } -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode{ //[super onPostExecute:result]; //call the delegate if(self.delegate != nil) [self.delegate afficherChargement:self afficher:NO]; } #pragma mark - Copy / Paste thoses functions on implementations ! /* -(void)doInBackground:(NSArray*)params{ } -(void)onPostExecute:(id)result{ [super onPostExecute:result]; } */ @end ================================================ FILE: ociney/src/Task/LoadBandeAnnonceFilmTask.h ================================================ // // LoadBandeAnnonceFilmTask.h // ociney // // Created by Kevin De Jesus Ferreira on 31/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "AsyncTask.h" #import "AllocineResponse.h" #import "Movie.h" @class LoadBandeAnnonceFilmTask; @protocol LoadBandeAnnonceFilmTaskDelegate -(void)onBaRecu:(LoadBandeAnnonceFilmTask*)task ba:(NSArray *)ba; -(void)onBaRecuVide:(LoadBandeAnnonceFilmTask*)task; @end @interface LoadBandeAnnonceFilmTask : AsyncTask @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/Task/LoadBandeAnnonceFilmTask.m ================================================ // // LoadBandeAnnonceFilmTask.m // ociney // // Created by Kevin De Jesus Ferreira on 31/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "LoadBandeAnnonceFilmTask.h" @implementation LoadBandeAnnonceFilmTask -(void)doInBackground:(NSArray*)params{ NSString * idMovie = [params objectAtIndex:0]; NSString * deuxPoint = @"%3A"; NSArray * paramsArray = [[NSArray alloc]initWithObjects: SUBJECT,[NSString stringWithFormat:@"movie%@%@",deuxPoint,idMovie], COUNT,@"20", MEDIAFMT,@"mp4", nil]; [self.service videoList:paramsArray]; } -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode{ [super onPostExecute:result statusCode:statusCode]; if(statusCode == 200){ NSError *error; AllocineResponse * alloReponse = [[AllocineResponse alloc] initWithString:result error:&error]; if(alloReponse.feed.media == nil) [self.delegate onBaRecuVide:self]; else{ [self.delegate onBaRecu:self ba:alloReponse.feed.media]; } } } @end ================================================ FILE: ociney/src/Task/LoadMovieFullTask.h ================================================ // // LoadMovieFullTask.h // ociney // // Created by Kevin De Jesus Ferreira on 05/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "AsyncTask.h" #import "AllocineResponse.h" #import "Movie.h" @class LoadMovieFullTask; @protocol LoadMovieFullTaskDelegate -(void)onMovieFullRecu:(LoadMovieFullTask*)task movie:(Movie *)movie; -(void)onMovieFullRecuVide:(LoadMovieFullTask*)task; @end @interface LoadMovieFullTask : AsyncTask @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/Task/LoadMovieFullTask.m ================================================ // // LoadMovieFullTask.m // ociney // // Created by Kevin De Jesus Ferreira on 05/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "LoadMovieFullTask.h" #import "ServiceSecurity.h" #import "AllocineService.h" #import "LoadBandeAnnonceFilmTask.h" @interface LoadMovieFullTask(){ Movie * movie; } @end @implementation LoadMovieFullTask -(void)doInBackground:(NSArray*)params{ NSString * idMovie = [params objectAtIndex:0]; // PROFILE_LARGE // FILTER MOVIE NSArray * paramsArray = [[NSArray alloc]initWithObjects: CODE,idMovie, PROFILE,@"large", FILTER,@"movie", nil]; [self.service movie:paramsArray]; } -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode{ [super onPostExecute:result statusCode:statusCode]; if(statusCode == 200){ NSError *error; AllocineResponse * alloReponse = [[AllocineResponse alloc] initWithString:result error:&error]; if(alloReponse.movie == nil) [self.delegate onMovieFullRecuVide:self]; else{ movie = alloReponse.movie; LoadBandeAnnonceFilmTask * taskBa = [[LoadBandeAnnonceFilmTask alloc]initWithDelegate:self]; [taskBa execute:@[[NSString stringWithFormat:@"%i",movie.code]]]; } } } -(void)onBaRecu:(LoadBandeAnnonceFilmTask*)task ba:(NSArray *)ba{ movie.bandesAnnonces = ba; [self.delegate onMovieFullRecu:self movie:movie]; } -(void)onBaRecuVide:(LoadBandeAnnonceFilmTask*)task{ [self.delegate onMovieFullRecu:self movie:movie]; } -(void)erreurReseau:(AsyncTask*)task { } -(void)afficherChargement:(AsyncTask*)task afficher:(BOOL)afficher { //self.headerMovieDetail.loader.hidden = !afficher; } @end ================================================ FILE: ociney/src/Task/OCLoadMoviesTask.h ================================================ // // OCLoadMoviesTask.m // ociney // // Created by Kevin De Jesus Ferreira on 26/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "AsyncTask.h" #import "OCLoadMoviesTask.h" #import "AllocineResponse.h" @class OCLoadMoviesTask; @protocol OCLoadMoviesTaskDelegate -(void)onMoviesListRecu:(OCLoadMoviesTask*)task moviesList:(NSArray *)moviesList; -(void)onMoviesListResultatVide:(OCLoadMoviesTask*)task; @end @interface OCLoadMoviesTask : AsyncTask @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/Task/OCLoadMoviesTask.m ================================================ // // OCLoadMoviesTask.m // ociney // // Created by Kevin De Jesus Ferreira on 26/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "AsyncTask.h" #import "OCLoadMoviesTask.h" #import "ServiceSecurity.h" #import "AllocineResponse.h" @implementation OCLoadMoviesTask -(void)doInBackground:(NSArray*)params{ NSString * filter = [params objectAtIndex:0]; NSString * profile = [params objectAtIndex:1]; NSString * order = [params objectAtIndex:2]; NSNumber * count = [params objectAtIndex:3]; NSNumber * page = [params objectAtIndex:4]; NSArray * paramsArray = [[NSArray alloc]initWithObjects:FILTER,filter, PROFILE,profile, ORDER,order, COUNT,[count stringValue], PAGE,[page stringValue], nil]; [self.service movielist:paramsArray]; } -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode{ [super onPostExecute:result statusCode:statusCode]; if(statusCode == 200){ NSError *error; AllocineResponse * alloReponse = [[AllocineResponse alloc] initWithString:result error:&error]; if(alloReponse.feed.movie == nil) [self.delegate onMoviesListResultatVide:self]; else [self.delegate onMoviesListRecu:self moviesList:alloReponse.feed.movie]; } } @end ================================================ FILE: ociney/src/Task/OCLoadPersonTask.h ================================================ // // OCLoadPersonTask.h // ociney // // Created by Kevin De Jesus Ferreira on 29/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "AsyncTask.h" #import "PersonFull.h" #import "AllocineResponse.h" @class OCLoadPersonTask; @protocol OCLoadPersonTaskDelegate -(void)onPersonRecu:(OCLoadPersonTask*)task person:(PersonFull *)person; @end @interface OCLoadPersonTask : AsyncTask @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/Task/OCLoadPersonTask.m ================================================ // // OCLoadStarsTask.m // ociney // // Created by Kevin De Jesus Ferreira on 29/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCLoadPersonTask.h" #import "ServiceSecurity.h" #import "AllocineResponse.h" @implementation OCLoadPersonTask -(void)doInBackground:(NSArray*)params{ NSString * code = [params objectAtIndex:0]; NSArray * paramsArray = @[ CODE,code, PROFILE,@"large", FILTER,@"person", ]; [self.service person:paramsArray]; } -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode{ [super onPostExecute:result statusCode:statusCode]; if(statusCode == 200){ NSError *error; AllocineResponse * alloReponse = [[AllocineResponse alloc] initWithString:result error:&error]; if(error != nil) NSLog(@"%@",error.description); if(alloReponse.person != nil) [self.delegate onPersonRecu:self person:alloReponse.person]; } } @end ================================================ FILE: ociney/src/Task/OCLoadShowTimesTask.h ================================================ #import #import "AsyncTask.h" #import "Theater.h" #import "AllocineResponse.h" @class OCLoadShowTimesTask; @protocol OCLoadShowTimesDelegate -(void)onLoadShowTimesTaskCallBack:(NSArray*)result; @end @interface OCLoadShowTimesTask : AsyncTask @property (assign,nonatomic) BOOL cinemaList; @property (strong,nonatomic) id delegate; -(id)initWithDelegate:(id)delegate andCinemaList:(BOOL)cinemaList; @end ================================================ FILE: ociney/src/Task/OCLoadShowTimesTask.m ================================================ // // OCLoadShowTimesTask.m // ociney // // Created by Florent on 31/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCLoadShowTimesTask.h" #import "ServiceSecurity.h" #import "AllocineResponse.h" #import "Movie.h" #define TRIM stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] @implementation OCLoadShowTimesTask { NSMutableArray *cinemas; } -(id)initWithDelegate:(id)delegate andCinemaList:(BOOL)cinemaList { if(self = [super initWithDelegate:delegate]) { self.cinemaList = cinemaList; } return self; } -(void)doInBackground:(NSArray*)params{ Movie* movie = (Movie*) params[0]; if (self.cinemaList) { cinemas = (NSMutableArray*) params[1]; NSMutableString* sb = [NSMutableString new]; NSInteger taille = cinemas.count; NSNumber * count = [NSNumber numberWithInt:20]; NSNumber * page = [NSNumber numberWithInt:1]; NSLog(@"CINEMA_TAILLE %ld", (long)taille); for (NSInteger i = 0; i < taille; ++i) { Theater *t = (Theater*)cinemas[i]; NSLog(@"CINEMA %@", t.code); [sb appendString:t.code]; if (i < taille - 1) [sb appendString:@","]; } [cinemas removeAllObjects]; [[[AllocineService alloc] initWithDelegate:self] showtimelistForTheaterAndMovie: @[ THEATERS, sb, MOVIE, [NSString stringWithFormat:@"%ld",(long)movie.code], DATE, [NSDate date], COUNT, [count stringValue], PAGE, [page stringValue] ] ]; }else { NSString *lat = params[1]; NSString *lng = params[2]; NSNumber * count = [NSNumber numberWithInt:20]; NSNumber * page = [NSNumber numberWithInt:1]; NSNumber * radius = [NSNumber numberWithInt:30]; cinemas = [NSMutableArray array]; [[[AllocineService alloc] initWithDelegate:self] showtimelistWithLatLngAndMovie: @[ LONG, lng, LAT, lat, RADIUS, [radius stringValue], MOVIE, [NSString stringWithFormat:@"%ld",(long)movie.code], COUNT, [count stringValue], PAGE, [page stringValue] ] ]; } } -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode{ [super onPostExecute:result statusCode:statusCode]; if(statusCode == 200){ NSError *error; AllocineResponse * alloReponse = [[AllocineResponse alloc] initWithString:result error:&error]; NSArray *theaterShowtime = alloReponse.feed.theaterShowtimes; if (theaterShowtime != nil){ [self loadShowTimes:cinemas showTimes:theaterShowtime ]; [self.delegate onLoadShowTimesTaskCallBack:cinemas]; } if(error != nil) NSLog(@"%@",error.description); } } -(void)loadShowTimes:(NSMutableArray*)theaters showTimes:(NSArray*)showtimes { for (TheaterShowtime *ts in showtimes) { Theater *cinema = ts.place.theater; [theaters addObject:cinema]; for (MovieShowtime *mst in ts.movieShowtimes) { BOOL avantPremiere = [mst.preview isEqualToString:@"true"]; NSString* formatEcran = nil; if (mst.screenFormat != nil) formatEcran = mst.screenFormat.$; NSString* version = mst.version.$; NSString* display = mst.display; for (Scr *scr in mst.scr) { Horaires* horaires = [Horaires new]; horaires.avantPremier = avantPremiere; horaires.display = display; horaires.formatEcran = formatEcran; horaires.version =version; horaires.date = scr.d; for (ModelObject *t in scr.t) { [horaires.seances addObject:t.$]; } if (!horaires.seances.count == 0) { [cinema.horaires addObject:horaires]; } } if (display != nil && !display.length == 0) { NSArray* joursHorraires = [display componentsSeparatedByString:@"Séances du"]; for (int i = 0; i < joursHorraires.count; i++) { if (joursHorraires != nil && joursHorraires.count > 0) { @try { NSArray* jrs = [joursHorraires[i] componentsSeparatedByString:@" : "]; if (jrs.count > 1) { NSString* jour = [jrs[0] TRIM]; NSString* hrs = [jrs[1] TRIM]; Horaires* horaires = [Horaires new]; horaires.avantPremier = avantPremiere; horaires.display = display; horaires.formatEcran = formatEcran; horaires.version = version; horaires.date = jour; if ([horaires isMoreThanToday]) { NSArray* horairesLignes = [hrs componentsSeparatedByString:@","]; for (int j = 0; j < horairesLignes.count; ++j) { NSString* horraire = [[[horairesLignes[j] TRIM] componentsSeparatedByString:@" "][0] TRIM]; [horaires.seances addObject:horraire]; } //Log.d("horaires",jour + horaires.getSeances().toString()); if (cinema.horairesSemaine[jour] != nil) { [cinema.horairesSemaine[jour] addObject:horaires]; } else { NSMutableArray* horairesDuJour = [NSMutableArray array]; [horairesDuJour addObject:horaires]; [cinema.horairesSemaineJours addObject:jour]; cinema.horairesSemaine[jour] = horairesDuJour; } } } } @catch (NSException *e) { NSLog(@"%@",e); } } } } } } } @end ================================================ FILE: ociney/src/Task/OCLoadStarsTask.h ================================================ // // OCLoadStarsTask.h // ociney // // Created by Kevin De Jesus Ferreira on 29/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "AsyncTask.h" #import "OCLoadMoviesTask.h" #import "AllocineResponse.h" @class OCLoadStarsTask; @protocol OCLoadStarsTaskDelegate -(void)onStarsListRecu:(OCLoadStarsTask*)task starsList:(NSArray *)starsList; -(void)onStarsListResultatVide:(OCLoadStarsTask*)task; @end @interface OCLoadStarsTask : AsyncTask @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/Task/OCLoadStarsTask.m ================================================ // // OCLoadStarsTask.m // ociney // // Created by Kevin De Jesus Ferreira on 29/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCLoadStarsTask.h" #import "ServiceSecurity.h" #import "AllocineResponse.h" @implementation OCLoadStarsTask -(void)doInBackground:(NSArray*)params{ NSString * filter = [params objectAtIndex:0]; NSString * profile = [params objectAtIndex:1]; NSNumber * count = [params objectAtIndex:2]; NSNumber * page = [params objectAtIndex:3]; NSArray * paramsArray = [[NSArray alloc]initWithObjects:FILTER,filter, PROFILE,profile, COUNT,[count stringValue], PAGE,[page stringValue], nil]; [self.service personList:paramsArray]; } -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode{ [super onPostExecute:result statusCode:statusCode]; if(statusCode == 200){ NSError *error; AllocineResponse * alloReponse = [[AllocineResponse alloc] initWithString:result error:&error]; if(alloReponse.feed.person == nil) [self.delegate onStarsListResultatVide:self]; else [self.delegate onStarsListRecu:self starsList:alloReponse.feed.person]; } } @end ================================================ FILE: ociney/src/Task/OCLoadTheaterMoviesTask.h ================================================ // // OCLoadTheaterMoviesTask.h // ociney // // Created by Kevin De Jesus Ferreira on 08/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "AsyncTask.h" #import "AllocineResponse.h" @class OCLoadTheaterMoviesTask; @protocol OCLoadTheaterMoviesTaskDelegate -(void)onMoviesListRecu:(OCLoadTheaterMoviesTask*)task movieList:(NSArray *)movies; -(void)onMoviesListResultatVide:(OCLoadTheaterMoviesTask*)task; @end @interface OCLoadTheaterMoviesTask : AsyncTask @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/Task/OCLoadTheaterMoviesTask.m ================================================ // // OCLoadTheaterMoviesTask.m // ociney // // Created by Kevin De Jesus Ferreira on 08/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCLoadTheaterMoviesTask.h" @implementation OCLoadTheaterMoviesTask{ Theater * cinema; } -(void)doInBackground:(NSArray*)params{ cinema = [params objectAtIndex:0]; //yyyy-MM-dd NSDate * date = [[NSDate alloc]init]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd"]; //Optionally for time zone conversions [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]]; NSString *d = [formatter stringFromDate:date]; NSArray * paramsArray = [[NSArray alloc]initWithObjects: THEATERS,cinema.code, DATE,d, COUNT,[NSString stringWithFormat:@"%i",10], PAGE ,[NSString stringWithFormat:@"%i",1], nil]; [self.service showtimelistForTheater:paramsArray]; } -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode{ [super onPostExecute:result statusCode:statusCode]; if(statusCode == 200){ NSError *error; AllocineResponse * alloReponse = [[AllocineResponse alloc] initWithString:result error:&error]; if(alloReponse.feed.theaterShowtimes == nil) [self.delegate onMoviesListResultatVide:self]; else [self.delegate onMoviesListRecu:self movieList:[TheaterShowtime getMovies:alloReponse.feed.theaterShowtimes andTheather:cinema]]; } } @end ================================================ FILE: ociney/src/Task/OCLoadTheatersTask.h ================================================ // // OCLoadTheatersTask.h // ociney // // Created by Kevin De Jesus Ferreira on 29/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "AsyncTask.h" #import "AllocineResponse.h" @class OCLoadTheatersTask; @protocol OCLoadTheatersTaskDelegate -(void)onTheatersListRecu:(OCLoadTheatersTask*)task theatherList:(NSArray *)theatherList; -(void)onTheatersListResultatVide:(OCLoadTheatersTask*)task; @end @interface OCLoadTheatersTask : AsyncTask @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/Task/OCLoadTheatersTask.m ================================================ // // OCLoadTheatersTask.m // ociney // // Created by Kevin De Jesus Ferreira on 29/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCLoadTheatersTask.h" @implementation OCLoadTheatersTask -(void)doInBackground:(NSArray*)params{ /* String lat = (String) data[0]; String lng = (String) data[1]; List theaters = Service.theaterlist(lat, lng, 30, 20, 1); */ NSString * lat = [params objectAtIndex:0]; NSString * lng = [params objectAtIndex:1]; NSNumber * count = [NSNumber numberWithInt:20]; NSNumber * page = [NSNumber numberWithInt:1]; NSNumber * radius = [NSNumber numberWithInt:30]; //String lat, String lng, int radius, int count, int page NSArray * paramsArray = [[NSArray alloc]initWithObjects: LAT,lat, LONG,lng, RADIUS,[radius stringValue], COUNT, [count stringValue], PAGE ,[page stringValue], nil]; [self.service theaterlist:paramsArray]; } -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode{ [super onPostExecute:result statusCode:statusCode]; if(statusCode == 200){ NSError *error; AllocineResponse * alloReponse = [[AllocineResponse alloc] initWithString:result error:&error]; if(alloReponse.feed.theater == nil) [self.delegate onTheatersListResultatVide:self]; else [self.delegate onTheatersListRecu:self theatherList:alloReponse.feed.theater]; } } @end ================================================ FILE: ociney/src/Task/RechercheTask.h ================================================ // // RechercheTask.h // ociney // // Created by Kevin De Jesus Ferreira on 21/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "AsyncTask.h" @class RechercheTask; @protocol CancelSearchDelegate -(void)onCancelSearch; @end @interface RechercheTask : AsyncTask @property (strong,nonatomic) id cancelDelegate; @end ================================================ FILE: ociney/src/Task/RechercheTask.m ================================================ // // RechercheTask.m // ociney // // Created by Kevin De Jesus Ferreira on 21/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "RechercheTask.h" @implementation RechercheTask @end ================================================ FILE: ociney/src/Task/RechercheTaskMovie.h ================================================ // // RechercheTaskMovie.h // ociney // // Created by Kevin De Jesus Ferreira on 21/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "RechercheTask.h" @class RechercheTaskMovie; @protocol RechercheTaskMovieDelegate -(void)onRechercheFilmRecu:(RechercheTaskMovie*)task movies:(NSArray *)listMovie; -(void)onRechercheFilmVide:(RechercheTaskMovie*)task; @end @interface RechercheTaskMovie : RechercheTask @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/Task/RechercheTaskMovie.m ================================================ // // RechercheTaskMovie.m // ociney // // Created by Kevin De Jesus Ferreira on 21/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "RechercheTaskMovie.h" #import "AllocineResponse.h" @implementation RechercheTaskMovie -(void)doInBackground:(NSArray*)params{ NSString * texte = [params objectAtIndex:0]; NSNumber * page = [NSNumber numberWithInt:1]; if([params count] > 1) page = [params objectAtIndex:1]; texte = [texte stringByReplacingOccurrencesOfString:@" " withString:@"+"]; NSArray * paramsArray = [[NSArray alloc]initWithObjects: Q,texte, FILTER,MOVIE, COUNT,@"20", PAGE,[page stringValue], nil]; [self.service search:paramsArray]; } -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode{ [super onPostExecute:result statusCode:statusCode]; if(statusCode == 200){ NSError *error; AllocineResponse * response = [[AllocineResponse alloc] initWithString:result error:&error]; if (response != nil && response.feed != nil && response.feed.movie != nil) [self.delegate onRechercheFilmRecu:self movies:response.feed.movie]; else [self.delegate onRechercheFilmVide:self]; // Collections.sort(movies); } } @end ================================================ FILE: ociney/src/Task/RechercheTaskStar.h ================================================ // // RechercheTaskStar.h // ociney // // Created by Kevin De Jesus Ferreira on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import #import "RechercheTask.h" @class RechercheTaskStar; @protocol RechercheTaskStarDelegate -(void)onRechercheStarRecu:(RechercheTaskStar*)task stars:(NSArray *)listStars; -(void)onRechercheStarVide:(RechercheTaskStar*)task; @end @interface RechercheTaskStar : RechercheTask @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/Task/RechercheTaskStar.m ================================================ // // RechercheTaskStar.m // ociney // // Created by Kevin De Jesus Ferreira on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import "RechercheTaskStar.h" #import "AllocineResponseSmall.h" #import "PersonFull.h" @implementation RechercheTaskStar -(void)doInBackground:(NSArray*)params{ NSString * texte = [params objectAtIndex:0]; NSNumber * page = [NSNumber numberWithInt:1]; if([params count] > 1) page = [params objectAtIndex:1]; texte = [texte stringByReplacingOccurrencesOfString:@" " withString:@"+"]; NSArray * paramsArray = [[NSArray alloc]initWithObjects: Q,texte, FILTER,@"person", COUNT,@"20", PAGE,[page stringValue], nil]; [self.service search:paramsArray]; } -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode{ [super onPostExecute:result statusCode:statusCode]; if(statusCode == 200){ NSError *error; AllocineResponseSmall * response = [[AllocineResponseSmall alloc] initWithString:result error:&error]; if (response != nil && response.feed != nil && response.feed.person != nil) [self.delegate onRechercheStarRecu:self stars:[PersonFull transformListFull:response.feed.person]]; else [self.delegate onRechercheStarVide:self]; } } @end ================================================ FILE: ociney/src/Task/RechercheTaskTheater.h ================================================ // // RechercheTaskTheater.h // ociney // // Created by Kevin De Jesus Ferreira on 02/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "RechercheTask.h" @class RechercheTaskTheater; @protocol RechercheTaskTheaterDelegate -(void)onRechercheTheaterRecu:(RechercheTaskTheater*)task theaters:(NSArray *)listCinemas; -(void)onRechercheTheaterVide:(RechercheTaskTheater*)task; @end @interface RechercheTaskTheater : RechercheTask @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/Task/RechercheTaskTheater.m ================================================ // // RechercheTaskTheater.m // ociney // // Created by Kevin De Jesus Ferreira on 02/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "RechercheTaskTheater.h" #import "AllocineResponse.h" @implementation RechercheTaskTheater -(void)doInBackground:(NSArray*)params{ NSString * texte = [params objectAtIndex:0]; NSNumber * page = [NSNumber numberWithInt:1]; if([params count] > 1) page = [params objectAtIndex:1]; texte = [texte stringByReplacingOccurrencesOfString:@" " withString:@"+"]; NSArray * paramsArray = [[NSArray alloc]initWithObjects: Q,texte, FILTER,THEATER, COUNT,@"20", PAGE,[page stringValue], nil]; [self.service search:paramsArray]; } -(void)onPostExecute:(id)result statusCode:(NSInteger)statusCode{ [super onPostExecute:result statusCode:statusCode]; if(statusCode == 200){ NSError *error; AllocineResponse * response = [[AllocineResponse alloc] initWithString:result error:&error]; if (response != nil && response.feed != nil && response.feed.theater != nil) [self.delegate onRechercheTheaterRecu:self theaters:response.feed.theater]; else [self.delegate onRechercheTheaterVide:self]; } } @end ================================================ FILE: ociney/src/Utils/Color+Hex.h ================================================ // // ColorUtils.h // WhatWhat // // Created by Florent Champigny on 14/08/2014. // Copyright (c) 2014 Florent Champigny. All rights reserved. // #import #import #import "Constantes.h" @interface UIColor (Hex) +(UIColor*)colorFromHexString:(NSString *)hexString; @end ================================================ FILE: ociney/src/Utils/Color+Hex.m ================================================ // // ColorUtils.m // WhatWhat // // Created by Florent Champigny on 14/08/2014. // Copyright (c) 2014 Florent Champigny. All rights reserved. // #import "Color+Hex.h" @implementation UIColor (Hex) +(UIColor*)colorFromHexString:(NSString *)hexString { NSString *cleanString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""]; if([cleanString length] == 3) { cleanString = [NSString stringWithFormat:@"%@%@%@%@%@%@", [cleanString substringWithRange:NSMakeRange(0, 1)],[cleanString substringWithRange:NSMakeRange(0, 1)], [cleanString substringWithRange:NSMakeRange(1, 1)],[cleanString substringWithRange:NSMakeRange(1, 1)], [cleanString substringWithRange:NSMakeRange(2, 1)],[cleanString substringWithRange:NSMakeRange(2, 1)]]; } if([cleanString length] == 6) { cleanString = [cleanString stringByAppendingString:@"ff"]; } unsigned int baseValue; [[NSScanner scannerWithString:cleanString] scanHexInt:&baseValue]; float red = ((baseValue >> 24) & 0xFF)/255.0f; float green = ((baseValue >> 16) & 0xFF)/255.0f; float blue = ((baseValue >> 8) & 0xFF)/255.0f; float alpha = ((baseValue >> 0) & 0xFF)/255.0f; return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; } @end ================================================ FILE: ociney/src/Utils/Constantes.h ================================================ // Constantes.h // WhatWhat // // Created by Florent Champigny on 14/08/2014. // Copyright (c) 2014 Florent Champigny. All rights reserved. // #ifndef WhatWhat_Constantes_h #define WhatWhat_Constantes_h #ifndef DEBUG #define DEBUG false #endif #define VERSION_APPLICATION @"Version 1.0.0" #define REGULAR @"HelveticaNeue" #define BOLD @"HelveticaNeue-Bold" #define THIN @"HelveticaNeue-Thin" #define LIGHT @"HelveticaNeue-Light" #define LIGHT_ITALIC @"HelveticaNeue-LightItalic" #define BLACK @"HelveticaNeue-CondensedBlack" #define CONDENSED_BOLD @"HelveticaNeue-CondensedBold" //RGBA ! #define GRAY @"#656565" #define ROSE_APP @"#FF004E" #define REDLIGHT @"#ffffbabc" #define TXT_BLACK @"#1f1f1f" #define BACKGROUND_APP @"#2e2e2e" #define GRAY_CELL @"#7d7d7d" #define WHAT_WHAT_BOTTOM_GRIS @"#f3f3f3" #define GRIS_CLAIRE @"#909090" #define txt_black @"#1f1f1f" #define BACKGROUND_WHITE_GRAY @"#f0f0f0" // BLACK ALPHA #define BLACK05 @"#0000000d" #define BLACK10 @"#0000001a" #define BLACK15 @"#00000026" #define BLACK20 @"#00000033" #define BLACK25 @"#00000040" #define BLACK30 @"#0000004d" #define BLACK35 @"#00000059" #define BLACK40 @"#00000066" #define BLACK45 @"#00000073" #define BLACK50 @"#00000080" #define BLACK55 @"#0000008c" #define BLACK60 @"#00000099" #define BLACK65 @"#000000a6" #define BLACK70 @"#000000b3" #define BLACK75 @"#000000bf" #define BLACK80 @"#000000cc" #define BLACK85 @"#000000d9" #define BLACK90 @"#000000e6" #define BLACK95 @"#000000f2" //WHITE ALPHA #define WHITE05 @"#ffffff0d" #define WHITE10 @"#ffffff1a" #define WHITE15 @"#ffffff26" #define WHITE20 @"#ffffff33" #define WHITE25 @"#ffffff40" #define WHITE30 @"#ffffff4d" #define WHITE35 @"#ffffff59" #define WHITE40 @"#ffffff66" #define WHITE45 @"#ffffff73" #define WHITE50 @"#ffffff80" #define WHITE55 @"#ffffff8c" #define WHITE60 @"#ffffff99" #define WHITE65 @"#ffffffa6" #define WHITE70 @"#ffffffb3" #define WHITE75 @"#ffffffbf" #define WHITE80 @"#ffffffcc" #define WHITE85 @"#ffffffd9" #define WHITE90 @"#ffffffe6" #define WHITE95 @"#fffffff2" #define BLUE_LIGHT @"33b5e5" // CONSTANTE DU MENU #define FILMS_MENU 0 #define STARTS_MENU 1 #define SALLES_MENU 2 #define CREDITS_MENU 3 #define FAVORIS_MENU 4 #endif ================================================ FILE: ociney/src/Utils/DateUtils.h ================================================ // // DateUtils.h // ociney // // Created by florent champigny on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import @interface DateUtils : NSObject +(NSInteger)age:(NSString*)birthDate; +(NSString*)formatBithDate:(NSString*)birthDate; @end ================================================ FILE: ociney/src/Utils/DateUtils.m ================================================ // // DateUtils.m // ociney // // Created by florent champigny on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "DateUtils.h" @implementation DateUtils +(NSInteger)age:(NSString*)birthDate { NSInteger annee = [[birthDate substringWithRange:NSMakeRange(0, 4)] integerValue]; NSInteger anneeCourate = 0; { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy"]; anneeCourate = [[formatter stringFromDate:[NSDate date]] integerValue]; } NSInteger age = anneeCourate-annee; return age; } +(NSString*)formatBithDate:(NSString*)birthDate { NSArray *fields = [birthDate componentsSeparatedByString:@"-"]; if(birthDate == nil || fields.count < 3) return @""; NSInteger annee = [fields[0] integerValue]; NSInteger mois = [fields[1] integerValue]; NSInteger jour = [fields[2] integerValue]; return [NSString stringWithFormat:@"%ld %@ %ld",(long)jour,[DateUtils moisInLetter:mois],(long)annee]; } +(NSString*)moisInLetter:(NSInteger)mois { switch (mois) { case 1: return NSLocalizedString(@"janvier",nil); case 2: return NSLocalizedString(@"février",nil); case 3: return NSLocalizedString(@"mars",nil); case 4: return NSLocalizedString(@"avril",nil); case 5: return NSLocalizedString(@"mai",nil); case 6: return NSLocalizedString(@"juin",nil); case 7: return NSLocalizedString(@"juillet",nil); case 8: return NSLocalizedString(@"août",nil); case 9: return NSLocalizedString(@"septembre",nil); case 10: return NSLocalizedString(@"octobre",nil); case 11: return NSLocalizedString(@"novembre",nil); case 12: return NSLocalizedString(@"décembre",nil); default: return @""; } } @end ================================================ FILE: ociney/src/Utils/UIImage+Blur.h ================================================ // // UIImage+Blur.h // ociney // // Created by florent champigny on 24/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import @interface UIImage (Blur) - (UIImage*) blur; @end ================================================ FILE: ociney/src/Utils/UIImage+Blur.m ================================================ // // UIImage+Blur.m // ociney // // Created by florent champigny on 24/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "UIImage+Blur.h" @implementation UIImage (Blur) - (UIImage*) blur { // ***********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:self.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:20.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]; } @end ================================================ FILE: ociney/src/View/CellTheaterHoraires.h ================================================ // // CellTheaterHoraires.h // ociney // // Created by florent champigny on 30/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "Horaires.h" @interface CellTheaterHoraires : UIView @property (strong,nonatomic) UIImageView *version; @property (strong,nonatomic) UIScrollView *scroll; @property (strong,nonatomic) UILabel *texte; -(void)loadHoraires:(Horaires*)horaires; @end ================================================ FILE: ociney/src/View/CellTheaterHoraires.m ================================================ // // CellTheaterHoraires.m // ociney // // Created by florent champigny on 30/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "CellTheaterHoraires.h" #import "Color+Hex.h" #import "Constantes.h" #import "Horaires.h" @implementation CellTheaterHoraires { BOOL first; } -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:frame]) { first = YES; } return self; } - (void)layoutSubviews { [self creer]; } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; [self remplir]; } -(void)creer { if(first){ first = NO; self.backgroundColor = [UIColor clearColor]; [self addSubview:(self.version = [UIImageView new])]; [self addSubview:(self.scroll = [UIScrollView new])]; [self.scroll addSubview:(self.texte = [UILabel new])]; self.scroll.backgroundColor = [UIColor clearColor]; self.scroll.bounces = NO; self.texte.numberOfLines = 1; self.texte.font = [UIFont fontWithName:BOLD size:11]; self.texte.textColor = [UIColor whiteColor]; self.version.contentMode = UIViewContentModeScaleAspectFit; } } -(void)remplir { self.version.frame = CGRectMake(0, 0, 18, 18); self.version.center = CGPointMake(self.version.center.x, self.bounds.size.height/2); self.scroll.contentSize = CGSizeMake(MAXFLOAT, MAXFLOAT); [self.texte sizeToFit]; self.texte.frame = CGRectMake(self.version.frame.origin.x + self.version.frame.size.width, 0, self.texte.frame.size.width, self.texte.frame.size.height); self.scroll.contentSize = CGSizeMake(self.texte.frame.size.width, self.texte.frame.size.height); { int x = self.version.frame.origin.x + self.version.frame.size.width; int width = self.bounds.size.width - x; self.scroll.frame = CGRectMake(x, self.version.frame.origin.y, width, self.texte.frame.size.height); self.scroll.center = CGPointMake(self.scroll.center.x, self.bounds.size.height/2); } } -(void)loadHoraires:(Horaires*)horaires { [self creer]; self.version.hidden = NO; if (horaires.formatEcran != nil) { if ([horaires.formatEcran containsString:@"3D"]) self.version.image = [UIImage imageNamed:@"ic_version_white_3d"]; else if ([horaires.formatEcran containsString:@"Numérique"]) self.version.image = [UIImage imageNamed:@"ic_version_white_2d"]; else if ([horaires.version containsString:@"Numérique"]) self.version.image = [UIImage imageNamed:@"ic_version_white_2d"]; else// if (![horaires.version containsString:@"Français"]) self.version.image = [UIImage imageNamed:@"ic_version_white_vo"]; //else // self.version.hidden = YES; } else self.version.hidden = YES; NSMutableString *sb = [NSMutableString new]; for (NSString* seance in horaires.seances){ [sb appendString:seance]; [sb appendString:@" "]; } self.texte.text = sb; [self remplir]; } @end ================================================ FILE: ociney/src/View/HeaderMovieDetail.h ================================================ // // HeaderMovieDetail.h // ociney // // Created by Kevin De Jesus Ferreira on 03/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "EDStarRating.h" #import "Movie.h" #import "OCLoader.h" #import "OCHeaderVersionView.h" #define MOVIE_HEADER_HEIGHT 130 #define MOVIE_HEADER_ANIMATION 1 @class HeaderMovieDetail; @protocol onPanDelegate -(void)onPanJaquette:(UIPanGestureRecognizer *)onPan; @end @interface HeaderMovieDetail : UIView @property (strong, nonatomic) UIPanGestureRecognizer *panGesture; @property (strong,nonatomic) id delegate; @property (strong,nonatomic) UIView * jaquette; @property (strong,nonatomic) UIImageView * parallaxImage; @property (strong,nonatomic) UIImageView * imageJaquette; @property (strong,nonatomic) UILabel * titreFilm; @property (strong,nonatomic) UILabel * styleFilm; @property (strong,nonatomic) UILabel * heureFilm; @property (strong,nonatomic) EDStarRating * starRating; @property (strong,nonatomic) Movie * movie; @property (strong,nonatomic) CAGradientLayer * gradient85; @property (strong,nonatomic) UIView * gradientViewBlack85; @property (strong,nonatomic) OCLoader * loader; -(void)chargerAvecMovie:(Movie *)movie; -(void)chargerVersionsDisponibles; @property (strong,nonatomic) OCHeaderVersionView * isVO; @property (strong,nonatomic) OCHeaderVersionView * isVF; @property (strong,nonatomic) OCHeaderVersionView * is2D; @property (strong,nonatomic) OCHeaderVersionView * is3D; @end ================================================ FILE: ociney/src/View/HeaderMovieDetail.m ================================================ // // HeaderMovieDetail.m // ociney // // Created by Kevin De Jesus Ferreira on 03/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "HeaderMovieDetail.h" #import "UIImageView+WebCache.h" #import "Color+Hex.h" #import "Constantes.h" #define SMALL_DURATION 0.4 @implementation HeaderMovieDetail /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. */ - (void)drawRect:(CGRect)rect { self.backgroundColor = [UIColor clearColor]; self.clipsToBounds = YES; { self.gradientViewBlack85 = [[UIView alloc]initWithFrame:CGRectZero]; [self addSubview:self.gradientViewBlack85]; self.gradient85 = [CAGradientLayer layer]; self.gradient85.colors = [NSArray arrayWithObjects:(id)[[UIColor clearColor] CGColor], (id)[[UIColor colorFromHexString:@"#000000d9"] CGColor], nil]; [self.gradientViewBlack85.layer insertSublayer:self.gradient85 atIndex:0]; } { self.jaquette = [[UIView alloc]initWithFrame:CGRectZero]; [self.jaquette setBackgroundColor:[UIColor whiteColor]]; [self addSubview:self.jaquette]; } { self.titreFilm = [[UILabel alloc]initWithFrame:CGRectZero]; self.titreFilm.textAlignment = NSTextAlignmentLeft; [self.titreFilm setTextColor:[UIColor whiteColor]]; self.titreFilm.font = [UIFont fontWithName:BOLD size:13]; [self addSubview:self.titreFilm]; } { self.styleFilm = [[UILabel alloc]initWithFrame:CGRectZero]; self.styleFilm.textAlignment = NSTextAlignmentLeft; [self.styleFilm setTextColor:[UIColor colorFromHexString:WHITE80]]; self.styleFilm.font = [UIFont fontWithName:LIGHT_ITALIC size:11]; [self addSubview:self.styleFilm]; } { self.heureFilm = [[UILabel alloc]initWithFrame:CGRectZero]; self.heureFilm.textAlignment = NSTextAlignmentLeft; [self.heureFilm setTextColor:[UIColor colorFromHexString:GRIS_CLAIRE]]; self.heureFilm.font = [UIFont fontWithName:BOLD size:11]; [self addSubview:self.heureFilm]; } { self.imageJaquette = [[UIImageView alloc]initWithFrame:CGRectZero]; [self.jaquette addSubview:self.imageJaquette]; } { self.starRating = [[EDStarRating alloc]initWithFrame:CGRectZero]; [self.starRating setBackgroundColor:[UIColor clearColor]]; CGRect rect = CGRectMake(0,0,15,15); UIGraphicsBeginImageContext( rect.size ); [[UIImage imageNamed:@"star_off_small.png"] drawInRect:rect]; UIImage *picture1 = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); NSData *imageData = UIImagePNGRepresentation(picture1); self.starRating.starImage = [UIImage imageWithData:imageData]; UIGraphicsBeginImageContext(rect.size ); [[UIImage imageNamed:@"star_on_small.png"] drawInRect:rect]; UIImage *picture2 = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); NSData *imageData2 = UIImagePNGRepresentation(picture2); self.starRating.starHighlightedImage = [UIImage imageWithData:imageData2]; self.starRating.maxRating = 5.0; //self.starRating.delegate = self; self.starRating.horizontalMargin = 122; self.starRating.editable=NO; self.starRating.displayMode=EDStarRatingDisplayAccurate; [self addSubview:self.starRating]; } { self.loader = [[OCLoader alloc]initWithFrame:CGRectZero]; self.loader.alpha = 0.5; [self.loader animer]; [self addSubview:self.loader]; } self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self.imageJaquette action:@selector(onPan:)]; } -(void)chargerAvecMovie:(Movie *)movie{ self.movie = movie; [self setNeedsLayout]; //[self remplir]; } - (void)layoutSubviews{ if(self.movie != nil){ self.gradientViewBlack85.frame = CGRectMake(0.0f, 0.0f, self.frame.size.width,self.frame.size.height); //self.gradientViewBlack85.alpha = 0.9; self.gradient85.frame = self.gradientViewBlack85.bounds; self.jaquette.frame = CGRectMake(10,10,80,110); [self.titreFilm setText:self.movie.title]; //(getObject().getUserRating() + getObject().getPressRating()) / 2 self.starRating.rating= (self.movie.statistics.userRating + self.movie.statistics.pressRating)/2; [self.heureFilm setText:[self.movie getDuree]]; [self.styleFilm setText:[self.movie getGenres]]; [self.imageJaquette sd_setImageWithURL:[NSURL URLWithString:self.movie.poster.href]]; [self.parallaxImage sd_setImageWithURL:[NSURL URLWithString:self.movie.defaultMedia.media.thumbnail.href]]; CALayer *layer = self.jaquette.layer; layer.shadowOffset = CGSizeMake(2, 2); layer.shadowColor = [[UIColor blackColor] CGColor]; layer.cornerRadius = 0.2f; layer.shadowRadius = 3.0f; layer.shadowOpacity = 0.80f; layer.shadowPath = [[UIBezierPath bezierPathWithRect:layer.bounds] CGPath]; self.imageJaquette.frame = CGRectMake(0,0,self.jaquette.frame.size.width-4,self.jaquette.frame.size.height-4); self.imageJaquette.center = CGPointMake(self.jaquette.frame.size.width/2, self.jaquette.frame.size.height/2); { [self.heureFilm sizeToFit]; NSInteger height = self.heureFilm.frame.size.height; NSInteger x = self.jaquette.frame.origin.x + self.jaquette.frame.size.width +10; NSInteger y = self.jaquette.frame.origin.y + self.jaquette.frame.size.height - height; NSInteger width = self.frame.size.width - x; self.heureFilm.frame = CGRectMake(x,y,width,height); } { [self.styleFilm sizeToFit]; NSInteger height = self.styleFilm.frame.size.height; NSInteger x = self.heureFilm.frame.origin.x; NSInteger y = self.heureFilm.frame.origin.y - height - 3; NSInteger width = self.frame.size.width - x; self.styleFilm.frame = CGRectMake(x,y,width,height); } { [self.titreFilm sizeToFit]; NSInteger height = self.titreFilm.frame.size.height; NSInteger x = self.heureFilm.frame.origin.x; NSInteger y = self.styleFilm.frame.origin.y - height - 3; NSInteger width = self.frame.size.width - x; self.titreFilm.frame = CGRectMake(x,y,width,height); } { NSInteger height = 15; NSInteger x = self.jaquette.frame.origin.x + self.jaquette.frame.size.width +10 - 124; NSInteger y = self.titreFilm.frame.origin.y - height - 3; NSInteger width = self.frame.size.width; self.starRating.frame = CGRectMake(x,y,width,height); } { NSInteger margin = 5; NSInteger height = 20; NSInteger width = 20; NSInteger x = self.bounds.size.width - width - margin; NSInteger y = margin; self.loader.frame = CGRectMake(x , y, width, height); } } } - (void)onPan:(UIPanGestureRecognizer *)pan { [self.delegate onPanJaquette:pan]; } -(void)chargerVersionsDisponibles { NSInteger globalX = self.bounds.size.width - 3; NSInteger elementHeight = 15; NSInteger globalY = self.bounds.size.height - elementHeight - 3; NSInteger elementWidth = 15; CGFloat alpha = 0; if([self.movie isVF]) { self.isVF = [[OCHeaderVersionView alloc] initWithImage:@"ic_version_white_vf"]; self.isVF.alpha = alpha; [self addSubview:self.isVF]; NSInteger x = globalX - elementWidth; NSInteger y = globalY; NSInteger width = elementWidth; NSInteger height = elementHeight; self.isVF.frame = CGRectMake(x, y, width, height); globalX = x; } if([self.movie isVO]) { self.isVO = [[OCHeaderVersionView alloc] initWithImage:@"ic_version_white_vo"]; self.isVO.alpha = alpha; [self addSubview:self.isVO]; NSInteger x = globalX - elementWidth; NSInteger y = globalY; NSInteger width = elementWidth; NSInteger height = elementHeight; self.isVO.frame = CGRectMake(x, y, width, height); globalX = x; } if([self.movie is2D]) { self.is2D = [[OCHeaderVersionView alloc] initWithImage:@"ic_version_white_2d"]; self.is2D.alpha = alpha; [self addSubview:self.is2D]; NSInteger x = globalX - elementWidth; NSInteger y = globalY; NSInteger width = elementWidth; NSInteger height = elementHeight; self.is2D.frame = CGRectMake(x, y, width, height); globalX = x; } if([self.movie is3D]) { self.is3D = [[OCHeaderVersionView alloc] initWithImage:@"ic_version_white_3d"]; self.is3D.alpha = alpha; [self addSubview:self.is3D]; NSInteger x = globalX - elementWidth; NSInteger y = globalY; NSInteger width = elementWidth; NSInteger height = elementHeight; self.is3D.frame = CGRectMake(x, y, width, height); globalX = x; } NSInteger translation = 100; alpha = 1; CGAffineTransform preTransform = CGAffineTransformMakeTranslation(translation, 0); self.isVF.transform = preTransform; self.isVO.transform = preTransform; self.is2D.transform = preTransform; self.is3D.transform = preTransform; [self animerIs3D]; } // BON OK c'est crade -(void)animerIsVF { if(self.isVF == nil){ }else{ [self.isVF tourner:SMALL_DURATION]; [UIView animateWithDuration:SMALL_DURATION delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ self.isVF.transform = CGAffineTransformIdentity; self.isVF.alpha = 1; } completion:^(BOOL finished) { [self.isVF arreterTourner]; }]; } } -(void)animerIsVO { if(self.isVO == nil){ [self animerIsVF]; }else{ [self.isVO tourner:SMALL_DURATION]; [UIView animateWithDuration:SMALL_DURATION delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ self.isVO.transform = CGAffineTransformIdentity; self.isVO.alpha = 1; } completion:^(BOOL finished) { [self.isVO arreterTourner]; [self animerIsVF]; }]; } } -(void)animerIs2D { if(self.is2D == nil){ [self animerIsVO]; }else{ [self.is2D tourner:SMALL_DURATION]; [UIView animateWithDuration:SMALL_DURATION delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ self.is2D.transform = CGAffineTransformIdentity; self.is2D.alpha = 1; } completion:^(BOOL finished) { [self.isVO arreterTourner]; [self animerIsVO]; }]; } } -(void)animerIs3D { if(self.is3D == nil){ [self animerIs2D]; }else{ [self.is3D tourner:SMALL_DURATION]; [UIView animateWithDuration:SMALL_DURATION delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ self.is3D.transform = CGAffineTransformIdentity; self.is3D.alpha = 1; } completion:^(BOOL finished) { [self.is3D arreterTourner]; [self animerIs2D]; }]; } } @end ================================================ FILE: ociney/src/View/HeaderStarDetail.h ================================================ // // HeaderStarDetail.h // ociney // // Created by florent champigny on 24/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "Person.h" #import "UIImageView+WebCache.h" #import "PersonFull.h" #import "PersonSmall.h" #import "OCLoader.h" #define HEADER_STAR_HEIGHT 100 @interface HeaderStarDetail : UIView @property (strong,atomic) IBOutlet Person* star; @property (strong,atomic) IBOutlet PersonFull* starFull; @property (strong,atomic) IBOutlet PersonSmall* starSmall; @property (strong,nonatomic) IBOutlet UIImageView* starImage; @property (strong,nonatomic) IBOutlet UIView* starBottomLayout; @property (strong,nonatomic) IBOutlet UIView* starBottomWhiteLayout; @property (strong,nonatomic) IBOutlet UIView* starBottomInformationsLayout; @property (strong,nonatomic) IBOutlet UILabel* starName; @property (strong,nonatomic) IBOutlet UILabel* starInformations; @property (strong,nonatomic) IBOutlet UIImageView* couronne; @property (strong,nonatomic) IBOutlet UIImageView* starPosition; @property (strong,nonatomic) OCLoader * loader; -(void)loadStarFull:(PersonFull*)starFull; @end ================================================ FILE: ociney/src/View/HeaderStarDetail.m ================================================ // // HeaderStarDetail.m // ociney // // Created by florent champigny on 24/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "HeaderStarDetail.h" #import "Color+Hex.h" #import "DateUtils.h" @interface HeaderStarDetail () { CAGradientLayer *starBottomWhiteGradient; UIView *starBottomGradientView; BOOL first; } @end @implementation HeaderStarDetail -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:frame]) { first = YES; } return self; } - (void)layoutSubviews { if(first){ first = NO; [self creer]; } } -(void)creer{ self.backgroundColor = [UIColor clearColor]; if ([self.star isKindOfClass:[PersonFull class]]) self.starFull = (PersonFull *) self.star; if ([self.star isKindOfClass:[PersonSmall class]]) self.starSmall = (PersonSmall *) self.star; self.layer.masksToBounds = NO; self.layer.shadowOffset = CGSizeMake(0, 1); self.layer.shadowRadius = 5; self.layer.shadowOpacity = 0.5; { { { self.starBottomLayout = [UIView new]; [self addSubview:self.starBottomLayout]; } { self.starBottomWhiteLayout = [UIView new]; self.starBottomWhiteLayout.backgroundColor = [UIColor whiteColor]; [self.starBottomLayout addSubview:self.starBottomWhiteLayout]; { starBottomGradientView = [[UIView alloc] initWithFrame:CGRectZero]; starBottomGradientView.alpha = 0.075; starBottomWhiteGradient = [CAGradientLayer layer]; starBottomWhiteGradient.colors = @[(id) [[UIColor clearColor] CGColor], (id) [[UIColor blackColor] CGColor]]; [starBottomGradientView.layer insertSublayer:starBottomWhiteGradient atIndex:0]; [self.starBottomWhiteLayout addSubview:starBottomGradientView]; } } { self.starBottomInformationsLayout = [UIView new]; [self.starBottomWhiteLayout addSubview:self.starBottomInformationsLayout]; } } { self.couronne = [UIImageView new]; [self.starBottomWhiteLayout addSubview:self.couronne]; self.couronne.image = [UIImage imageNamed:@"ic_cropped_crown"]; self.couronne.alpha = 0.05; self.couronne.contentMode = UIViewContentModeScaleAspectFit; self.couronne.hidden = YES; } { self.starImage = [UIImageView new]; self.starImage.contentMode = UIViewContentModeScaleAspectFill; [self.starBottomLayout addSubview:self.starImage]; self.starImage.backgroundColor = [UIColor grayColor]; [self.starImage sd_setImageWithURL:[NSURL URLWithString:self.star.picture.href]]; self.starImage.layer.borderWidth = 3.0f; self.starImage.layer.borderColor = [UIColor whiteColor].CGColor; } { self.starName = [UILabel new]; self.starName.font = [UIFont fontWithName:REGULAR size:16]; self.starName.textColor = [UIColor colorFromHexString:BLACK80]; [self.starBottomInformationsLayout addSubview:self.starName]; if (self.starSmall != nil) self.starName.text = self.starSmall.name; else if (self.starFull != nil) self.starName.text = [self.starFull.name getName]; } { self.starInformations = [UILabel new]; self.starInformations.textColor = [UIColor colorFromHexString:BLACK50]; self.starInformations.font = [UIFont fontWithName:LIGHT_ITALIC size:12]; [self.starBottomInformationsLayout addSubview:self.starInformations]; } { self.starPosition = [UIImageView new]; [self.starBottomWhiteLayout addSubview:self.starPosition]; self.starPosition.hidden = YES; self.starPosition.contentMode = UIViewContentModeScaleAspectFit; self.starPosition.alpha = 0.5f; } { self.loader = [[OCLoader alloc]initWithFrame:CGRectZero]; self.loader.alpha = 0.5; [self.loader animer]; [self addSubview:self.loader]; } } } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; [self remplir]; } - (void)remplir { NSInteger paddingLeft = 10; { //layouts initialisation { NSInteger x = 0; NSInteger y = 0; NSInteger width = (int) self.bounds.size.width; NSInteger height = HEADER_STAR_HEIGHT; self.starBottomLayout.frame = CGRectMake(x, y, width, height); } { NSInteger x = 0; NSInteger height = 60; NSInteger width = (NSInteger) self.starBottomLayout.frame.size.width; NSInteger y = (NSInteger) (self.starBottomLayout.bounds.size.height - height); self.starBottomWhiteLayout.frame = CGRectMake(x, y, width, height); } } { { //image NSInteger x = paddingLeft + 0; NSInteger height = 90; NSInteger width = height; NSInteger y = (NSInteger) (self.starBottomLayout.frame.size.height - height - 5); self.starImage.frame = CGRectMake(x, y, width, height); self.starImage.layer.cornerRadius = self.starImage.frame.size.width / 2; self.starImage.clipsToBounds = YES; } { //starBottomInformationsLayout NSInteger x = (NSInteger) (self.starImage.frame.origin.x + self.starImage.frame.size.width + 5); NSInteger y = 0; NSInteger width = (NSInteger) (self.starBottomWhiteLayout.frame.size.width - x); NSInteger height = (NSInteger) self.starBottomWhiteLayout.frame.size.height; self.starBottomInformationsLayout.frame = CGRectMake(x, y, width, height); } } { //informations layout { //textName NSInteger x = 0; NSInteger y = 10; NSInteger height = 0; //sizeToFit NSInteger width = (NSInteger) (self.starBottomInformationsLayout.frame.size.width - x); self.starName.frame = CGRectMake(x, y, width, height); [self.starName sizeToFit]; } } starBottomGradientView.frame = self.starBottomWhiteLayout.bounds; starBottomWhiteGradient.frame = starBottomGradientView.bounds; if (self.starFull != nil && self.starFull.birthDate != nil) { ModelObject *modelObject = [self.starFull.nationality objectAtIndex:0]; self.starInformations.text = [NSString stringWithFormat:@"%ld ans (%@)", (long) [DateUtils age:self.starFull.birthDate], modelObject.$]; { //textInfos NSInteger x = (NSInteger) self.starName.frame.origin.x; NSInteger y = (NSInteger) (self.starName.frame.origin.y + self.starName.frame.size.height + 3); NSInteger height = 0; //sizeToFit NSInteger width = (NSInteger) (self.starBottomInformationsLayout.frame.size.width - x); self.starInformations.frame = CGRectMake(x, y, width, height); [self.starInformations sizeToFit]; self.starInformations.frame = CGRectMake(x, y, width, self.starInformations.frame.size.height); } } { if (self.starFull.statistics != nil) { NSInteger top_rank = self.starFull.statistics.rankTopStar; { self.starBottomWhiteLayout.clipsToBounds = YES; NSInteger width = 90; NSInteger height = 90; self.couronne.frame = CGRectMake(self.starBottomWhiteLayout.bounds.size.width - 80, 0, width, height); self.couronne.hidden = YES; } { NSInteger width = 25; NSInteger height = 25; self.starPosition.frame = CGRectMake(self.starBottomWhiteLayout.bounds.size.width - width - 10, self.starBottomWhiteLayout.bounds.size.height - height, width, height); self.starPosition.hidden = YES; } switch (top_rank) { case 1: self.couronne.hidden = NO; self.starPosition.hidden = NO; self.starPosition.image = [UIImage imageNamed:@"ic_topstar_1"]; break; case 2: self.starPosition.hidden = NO; self.starPosition.image = [UIImage imageNamed:@"ic_topstar_2"]; break; case 3: self.starPosition.hidden = NO; self.starPosition.image = [UIImage imageNamed:@"ic_topstar_3"]; break; default:{} } } } { if(self.starBottomWhiteLayout != nil) { NSInteger margin = 5; NSInteger height = 20; NSInteger width = 20; NSInteger x = self.bounds.size.width - width - margin; NSInteger y = self.starBottomWhiteLayout.frame.origin.y - height - margin; self.loader.frame = CGRectMake(x , y, width, height); } } if(self.starFull != nil){ self.starImage = nil; self.starBottomLayout = nil; self.starBottomWhiteLayout = nil; self.starBottomInformationsLayout = nil; self.starName = nil; self.starInformations = nil; self.couronne = nil; self.starPosition = nil; } } - (void)loadStarFull:(PersonFull *)starFull { self.starFull = starFull; [self remplir]; } @end ================================================ FILE: ociney/src/View/MovieDetailContent.h ================================================ // // MovieDetailContent.h // ociney // // Created by Kevin De Jesus Ferreira on 03/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "Movie.h" #import "PersonFull.h" #import "OCMovieDelegates.h" @protocol MovideDetailContentDelegate -(void)horairesClicked; -(void)memberClicked:(PersonFull *)person; -(void)onMoreStarClicked; @end @interface MovieDetailContent : UIView @property (strong,nonatomic) id delegate; @property (strong,nonatomic) Movie * movie; @property (strong,nonatomic) CastMember * realisateur; @property (strong,nonatomic) UIView * contentHoraire; @property (strong,nonatomic) UIView * contentNotes; @property (strong,nonatomic) UIView * contentSynopsis; @property (strong,nonatomic) UIView * contentInfo; @property (strong,nonatomic) UIView * contentCasting; @property (strong,nonatomic) UIView * contentMembers; @property (assign,nonatomic) int height; @property (strong,nonatomic) UIScrollView * scrollContent; -(void)chargerAvecMovie:(Movie *)movie; // Content Horaire @property (strong,nonatomic) UIView * shapeRound; @property (strong,nonatomic) UIImageView * imageSalle; @property (strong,nonatomic) UILabel * texteExplication; // Content Notes @property (strong,nonatomic) UIView * viewBackSpectateur; @property (strong,nonatomic) UIView * viewFrontSpectateur; @property (strong,nonatomic) UIView * viewAvancementSpectateur; @property (strong,nonatomic) UILabel * noteSpectateur; @property (strong,nonatomic) UIView * viewBackPresse; @property (strong,nonatomic) UIView * viewFrontPresse; @property (strong,nonatomic) UIView * viewAvancementPresse; @property (strong,nonatomic) UILabel * notePresse; @property (strong,nonatomic) UILabel * titleNotes; // Content Synopsis @property (strong,nonatomic) NSString * synopsis; @property (strong,nonatomic) UILabel * titleSynopsis; @property (strong,nonatomic) UILabel * synopsisLabel; // Content Info @property(strong,nonatomic) NSString * dateSortie; @property(strong,nonatomic) NSString * titreOriginal; @property(strong,nonatomic) UILabel * descriptionDateSortie; @property(strong,nonatomic) UILabel * descriptionTitreOriginal; @property(strong,nonatomic) UILabel * valueDateSortie; @property(strong,nonatomic) UILabel * valueTitreOriginal; // Content Casting @property (strong,nonatomic) UIView * fond; @property (strong,nonatomic) UIView * cercleFond; @property (strong,nonatomic) UIImageView * imageRealisateur; @property (strong,nonatomic) UILabel * fonction; @property (strong,nonatomic) UILabel * nameRealisateur; @property (strong,nonatomic) UILabel * titleCasting; @property (strong,nonatomic) UIImageView * plus_dashed_photos_white; @property (strong,nonatomic) UIImageView * plus_white; // Content Members @property (strong,nonatomic) NSArray * castMembers; @end ================================================ FILE: ociney/src/View/MovieDetailContent.m ================================================ // // MovieDetailContent.m // ociney // // Created by Kevin De Jesus Ferreira on 03/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "MovieDetailContent.h" #import "Color+Hex.h" #import "Constantes.h" #import "UIImageView+WebCache.h" #import "PersonFull.h" #import "OCCastMember.h" #define HAUTEUR_AVANCEMENT 20 #define MARGIN_TOP 30 @interface MovieDetailContent(){ int widthInsideScroll; BOOL notFirstCreated; } @end @implementation MovieDetailContent -(void)chargerAvecMovie:(Movie *)movie{ self.movie = movie; [self setNeedsLayout]; } - (void)layoutSubviews{ if(!notFirstCreated) { notFirstCreated = YES; self.scrollContent = [[UIScrollView alloc]initWithFrame:CGRectMake(0,0, self.frame.size.width, self.frame.size.height)]; self.scrollContent.bounces = NO; self.scrollContent.contentSize = CGSizeMake(self.frame.size.width, MAXFLOAT); widthInsideScroll = self.scrollContent.frame.size.width - 80; [self chargerContentHoraires]; [self chargerContentNotes]; [self chargerContentSynopsis]; [self chargerInfo]; [self chargerCasting]; [self chargerContentMembers]; [self addSubview:self.scrollContent]; self.scrollContent.contentSize = CGSizeMake(self.frame.size.width, self.contentMembers.frame.size.height + self.contentMembers.frame.origin.y + 50 ); } } -(void) chargerContentHoraires { if(self.movie.hasShowtime != 1){ self.contentHoraire.frame = CGRectZero; self.contentHoraire.clipsToBounds = YES; }else{ self.contentHoraire = [[UIView alloc]initWithFrame:CGRectMake(0, 0, widthInsideScroll, 30)]; { [self.contentHoraire addSubview:(self.shapeRound = [UIView new])]; self.shapeRound.backgroundColor=[UIColor blackColor]; [self.shapeRound addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(horairesClicked)]]; self.shapeRound.frame = CGRectMake(0, 15, self.frame.size.width-60, 55); self.shapeRound.layer.cornerRadius = self.shapeRound.frame.size.height/2; self.shapeRound.center = CGPointMake(self.contentHoraire.frame.size.width/2, self.shapeRound.center.y); [self.shapeRound addSubview:(self.imageSalle = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ic_drawer_salles.png"]])]; self.imageSalle.contentMode = UIViewContentModeScaleAspectFit; self.imageSalle.frame = CGRectMake(18,0, 40, 40); self.imageSalle.center = CGPointMake(self.imageSalle.center.x, self.shapeRound.frame.size.height/2); [self.shapeRound addSubview:self.imageSalle]; { [self.shapeRound addSubview:(self.texteExplication = [UILabel new])]; self.texteExplication.textAlignment = NSTextAlignmentLeft; self.texteExplication.numberOfLines = 2; [self.texteExplication setTextColor:[UIColor colorFromHexString:WHITE90]]; self.texteExplication.font = [UIFont fontWithName:THIN size:13]; self.texteExplication.text = @"Trouvez une salle à proximité ... \nou plus loin qu'à proximité"; int x = self.imageSalle.frame.origin.x + self.imageSalle.frame.size.width + 10; int width = self.shapeRound.bounds.size.width - x; int height = 50; self.texteExplication.frame = CGRectMake(x, 0, width, height); self.texteExplication.center = CGPointMake(self.texteExplication.center.x, self.shapeRound.bounds.size.height/2); } } self.contentHoraire.frame = CGRectMake(0, 0, widthInsideScroll, self.shapeRound.frame.origin.y + self.shapeRound.frame.size.height); self.contentHoraire.center = CGPointMake(self.center.x, self.contentHoraire.center.y); } [self.scrollContent addSubview:self.contentHoraire]; } -(void) chargerContentNotes { self.contentNotes = [[UIView alloc]initWithFrame:CGRectMake(0,self.contentHoraire.frame.origin.y + self.contentHoraire.frame.size.height + MARGIN_TOP,widthInsideScroll, 100)]; self.contentNotes.center = CGPointMake(self.center.x, self.contentNotes.center.y); { self.titleNotes = [[UILabel alloc]initWithFrame:CGRectMake(0,0,300,20)]; [self.titleNotes setText:@"LES NOTES"]; self.titleNotes.alpha = 0.3; self.titleNotes.textAlignment = NSTextAlignmentLeft; [self.titleNotes setTextColor:[UIColor whiteColor]]; self.titleNotes.font = [UIFont fontWithName:BLACK size:25]; [self.contentNotes addSubview:self.titleNotes]; // Spectateur self.viewBackSpectateur = [[UIView alloc]initWithFrame:CGRectMake(0, HAUTEUR_AVANCEMENT+MARGIN_TOP, self.contentNotes.frame.size.width, 9)]; [self.viewBackSpectateur setBackgroundColor:[UIColor colorFromHexString:@"#333"]]; [self.contentNotes addSubview:self.viewBackSpectateur]; self.viewFrontSpectateur = [[UIView alloc]initWithFrame:CGRectMake(0, HAUTEUR_AVANCEMENT+MARGIN_TOP, 0, 9)]; [self.viewFrontSpectateur setBackgroundColor:[UIColor whiteColor]]; [self.contentNotes addSubview:self.viewFrontSpectateur]; self.viewAvancementSpectateur = [[UIView alloc]initWithFrame:CGRectMake(0, MARGIN_TOP, 1, HAUTEUR_AVANCEMENT)]; [self.viewAvancementSpectateur setBackgroundColor:[UIColor whiteColor]]; [self.contentNotes addSubview:self.viewAvancementSpectateur]; self.noteSpectateur = [[UILabel alloc]initWithFrame:CGRectMake(-45, MARGIN_TOP, 40, 15)]; [self.noteSpectateur setText:[NSString stringWithFormat:@"%.01f",self.movie.statistics.userRating]]; self.noteSpectateur.textAlignment = NSTextAlignmentRight; [self.noteSpectateur setTextColor:[UIColor whiteColor]]; self.noteSpectateur.font = [UIFont fontWithName:THIN size:13]; [self.contentNotes addSubview:self.noteSpectateur]; // PRESSE self.viewBackPresse = [[UIView alloc]initWithFrame:CGRectMake(0, HAUTEUR_AVANCEMENT + self.viewFrontSpectateur.frame.origin.y + self.viewFrontSpectateur.frame.size.height - 10, self.contentNotes.frame.size.width, 9)]; [self.viewBackPresse setBackgroundColor:[UIColor colorFromHexString:@"#333"]]; [self.contentNotes addSubview:self.viewBackPresse]; self.viewFrontPresse = [[UIView alloc]initWithFrame:CGRectMake(0, HAUTEUR_AVANCEMENT + self.viewFrontSpectateur.frame.origin.y + self.viewFrontSpectateur.frame.size.height - 10, 0, 9)]; [self.viewFrontPresse setBackgroundColor:[UIColor whiteColor]]; [self.contentNotes addSubview:self.viewFrontPresse]; self.viewAvancementPresse = [[UIView alloc]initWithFrame:CGRectMake(0, HAUTEUR_AVANCEMENT + self.viewFrontSpectateur.frame.origin.y + self.viewFrontSpectateur.frame.size.height - 1, 1, HAUTEUR_AVANCEMENT)]; [self.viewAvancementPresse setBackgroundColor:[UIColor whiteColor]]; [self.contentNotes addSubview:self.viewAvancementPresse]; self.notePresse = [[UILabel alloc]initWithFrame:CGRectMake(-45, HAUTEUR_AVANCEMENT + self.viewFrontSpectateur.frame.origin.y + self.viewFrontSpectateur.frame.size.height + 5, 40, 15)]; [self.notePresse setText:[NSString stringWithFormat:@"%.01f",self.movie.statistics.pressRating]]; self.notePresse.textAlignment = NSTextAlignmentRight; [self.notePresse setTextColor:[UIColor whiteColor]]; self.notePresse.font = [UIFont fontWithName:THIN size:13]; [self.contentNotes addSubview:self.notePresse]; int max = 5; float largeurMax = self.contentNotes.frame.size.width; float pourcentSpectateur = self.movie.statistics.userRating / max; float pourcentPresse = self.movie.statistics.pressRating / max; int largeurSpectateur = (int) (largeurMax * pourcentSpectateur); int largeurPresse = (int) (largeurMax * pourcentPresse); // Animation [UIView animateWithDuration:0.9 delay:2 options:UIViewAnimationOptionCurveLinear animations:^(void) { // Spectateur self.viewFrontSpectateur.frame = CGRectMake(0, HAUTEUR_AVANCEMENT+MARGIN_TOP, largeurSpectateur, 9); self.viewAvancementSpectateur.frame = CGRectMake(self.viewFrontSpectateur.frame.size.width-1, MARGIN_TOP, 1, HAUTEUR_AVANCEMENT); self.noteSpectateur.frame = CGRectMake(self.viewAvancementSpectateur.frame.origin.x-5- self.noteSpectateur.frame.size.width, MARGIN_TOP, 40, 15); // Presse self.viewFrontPresse.frame = CGRectMake(0, HAUTEUR_AVANCEMENT + self.viewFrontSpectateur.frame.origin.y + self.viewFrontSpectateur.frame.size.height - 10, largeurPresse, 9); self.viewAvancementPresse.frame = CGRectMake(self.viewFrontPresse.frame.size.width-1 , HAUTEUR_AVANCEMENT + self.viewFrontSpectateur.frame.origin.y + self.viewFrontSpectateur.frame.size.height - 1, 1, HAUTEUR_AVANCEMENT); self.notePresse.frame = CGRectMake(self.viewAvancementPresse.frame.origin.x-5- self.notePresse.frame.size.width, HAUTEUR_AVANCEMENT + self.viewFrontSpectateur.frame.origin.y + self.viewFrontSpectateur.frame.size.height + 5, 40, 15); } completion:^(BOOL finished) {} ]; } self.contentNotes.frame = CGRectMake(self.contentNotes.frame.origin.x,self.contentNotes.frame.origin.y, self.contentNotes.frame.size.width,self.viewAvancementPresse.frame.origin.y + self.viewAvancementPresse.frame.size.height); self.contentNotes.center = CGPointMake(self.center.x, self.contentNotes.center.y); [self.scrollContent addSubview:self.contentNotes]; } -(void) chargerContentSynopsis { self.contentSynopsis = [[UIView alloc]initWithFrame:CGRectMake(0,self.contentNotes.frame.origin.y + self.contentNotes.frame.size.height + MARGIN_TOP,widthInsideScroll, 100)]; self.contentSynopsis.center = CGPointMake(self.center.x, self.contentSynopsis.center.y); { self.titleSynopsis = [[UILabel alloc]initWithFrame:CGRectMake(0,0,300,20)]; [self.titleSynopsis setText:@"SYNOPSIS"]; self.titleSynopsis.alpha = 0.3; self.titleSynopsis.textAlignment = NSTextAlignmentLeft; //[self.titleSynopsis sizeToFit]; [self.titleSynopsis setTextColor:[UIColor whiteColor]]; self.titleSynopsis.font = [UIFont fontWithName:BLACK size:25]; [self.contentSynopsis addSubview:self.titleSynopsis]; NSMutableParagraphStyle *paragraphStyles = [[NSMutableParagraphStyle alloc] init]; paragraphStyles.alignment = NSTextAlignmentJustified; //justified text paragraphStyles.firstLineHeadIndent = 10.0; NSDictionary *attributes = @{NSParagraphStyleAttributeName: paragraphStyles}; NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:[self.movie getSynopsis]attributes: attributes]; self.synopsisLabel = [[UILabel alloc]initWithFrame:CGRectMake(0,30,self.contentSynopsis.frame.size.width,20)]; self.synopsisLabel.font = [UIFont fontWithName:REGULAR size:12]; [self.synopsisLabel setTextColor:[UIColor whiteColor]]; self.synopsisLabel.numberOfLines = 0; self.synopsisLabel.textAlignment = NSTextAlignmentLeft; self.synopsisLabel.attributedText = attributedString; [self.synopsisLabel sizeToFit]; [self.contentSynopsis addSubview:self.synopsisLabel]; } self.contentSynopsis.frame = CGRectMake(self.contentSynopsis.frame.origin.x,self.contentSynopsis.frame.origin.y, self.contentSynopsis.frame.size.width,self.synopsisLabel.frame.origin.y + self.synopsisLabel.frame.size.height); self.contentSynopsis.center = CGPointMake(self.center.x, self.contentSynopsis.center.y); [self.scrollContent addSubview:self.contentSynopsis]; } -(void) chargerInfo { self.contentInfo = [[UIView alloc]initWithFrame:CGRectMake(0,self.contentSynopsis.frame.origin.y + self.contentSynopsis.frame.size.height + MARGIN_TOP,widthInsideScroll, 100)]; self.contentInfo.center = CGPointMake(self.center.x, self.contentInfo.center.y); { self.descriptionDateSortie = [[UILabel alloc]initWithFrame:CGRectMake(0,0,100,20)]; [self.descriptionDateSortie setText:@"Date de sortie :"]; self.descriptionDateSortie.textAlignment = NSTextAlignmentLeft; self.descriptionDateSortie.font = [UIFont fontWithName:LIGHT size:12]; [self.descriptionDateSortie setTextColor:[UIColor colorFromHexString:WHITE65]]; [self.contentInfo addSubview:self.descriptionDateSortie]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd"]; NSCalendar *cal = [NSCalendar currentCalendar]; NSDateComponents *components = [cal components:(NSCalendarUnitEra|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:[NSDate date]]; NSDate *today = [cal dateFromComponents:components]; NSDate *dateRelease = [dateFormatter dateFromString:[self.movie._release getReleaseDate]]; if(self.movie != nil && dateRelease != nil) components = [cal components:(NSCalendarUnitEra|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:dateRelease]; NSDate *otherDate = nil; if(components != nil) otherDate = [cal dateFromComponents:components]; int yDescription = 30; if([today compare:otherDate] == NSOrderedAscending) { yDescription = 0; self.valueDateSortie = [[UILabel alloc]initWithFrame:CGRectZero]; self.descriptionDateSortie.frame = CGRectZero; }else{ self.valueDateSortie = [[UILabel alloc]initWithFrame:CGRectMake(self.contentInfo.frame.size.width - 100,0,100,20)]; NSDateFormatter *inDateFormatter = [[NSDateFormatter alloc] init]; [inDateFormatter setDateFormat:@"yyyy-MM-dd"]; NSDate *d = [inDateFormatter dateFromString:self.movie._release.releaseDate]; NSDateFormatter *outDateFormatter = [[NSDateFormatter alloc] init]; [outDateFormatter setDateFormat:@"dd/MM/yyyy"]; self.valueDateSortie.text = [outDateFormatter stringFromDate:d ]; self.valueDateSortie.textAlignment = NSTextAlignmentRight; self.valueDateSortie.numberOfLines = 1 ; self.valueDateSortie.font = [UIFont fontWithName:BOLD size:11]; self.valueDateSortie.textColor = [UIColor colorFromHexString:WHITE75]; } [self.contentInfo addSubview:self.valueDateSortie]; if(self.movie.originalTitle != nil && ![self.movie sameTitleAndOriginalTitle]){ self.descriptionTitreOriginal = [[UILabel alloc]initWithFrame:CGRectMake(0,yDescription,100,20)]; [self.descriptionTitreOriginal setText:@"Titre original :"]; self.descriptionTitreOriginal.textAlignment = NSTextAlignmentLeft; self.descriptionTitreOriginal.font = [UIFont fontWithName:LIGHT size:12]; [self.descriptionTitreOriginal setTextColor:[UIColor colorFromHexString:WHITE65]]; [self.contentInfo addSubview:self.descriptionTitreOriginal]; self.valueTitreOriginal = [[UILabel alloc]initWithFrame:CGRectMake(self.contentInfo.frame.size.width - 100,30,100,20)]; [self.valueTitreOriginal setText:self.movie.originalTitle]; self.valueTitreOriginal.textAlignment = NSTextAlignmentRight; self.valueTitreOriginal.numberOfLines = 1 ; self.valueTitreOriginal.font = [UIFont fontWithName:BOLD size:11]; [self.valueTitreOriginal setTextColor:[UIColor colorFromHexString:WHITE75]]; [self.contentInfo addSubview:self.valueTitreOriginal]; self.contentInfo.frame = CGRectMake(self.contentInfo.frame.origin.x,self.contentInfo.frame.origin.y, self.contentInfo.frame.size.width,self.valueTitreOriginal.frame.origin.y + self.valueTitreOriginal.frame.size.height); }else{ self.valueTitreOriginal = [[UILabel alloc]initWithFrame:CGRectZero]; self.descriptionTitreOriginal = [[UILabel alloc]initWithFrame:CGRectZero]; self.contentInfo.frame = CGRectMake(self.contentInfo.frame.origin.x,self.contentInfo.frame.origin.y, self.contentInfo.frame.size.width,self.descriptionTitreOriginal.frame.origin.y + self.descriptionTitreOriginal.frame.size.height); } } self.contentInfo.center = CGPointMake(self.center.x, self.contentInfo.center.y); [self.scrollContent addSubview:self.contentInfo]; } -(void) chargerCasting{ self.contentCasting = [[UIView alloc]initWithFrame:CGRectMake(0,self.contentInfo.frame.origin.y + self.contentInfo.frame.size.height + 20 + MARGIN_TOP,widthInsideScroll, 100)]; self.contentCasting.center = CGPointMake(self.center.x, self.contentCasting.center.y); { self.titleCasting = [[UILabel alloc]initWithFrame:CGRectMake(0,0,300,20)]; [self.titleCasting setText:@"CASTING"]; self.titleCasting.alpha = 0.3; self.titleCasting.textAlignment = NSTextAlignmentLeft; //[self.titleCasting sizeToFit]; [self.titleCasting setTextColor:[UIColor whiteColor]]; self.titleCasting.font = [UIFont fontWithName:BLACK size:25]; [self.contentCasting addSubview:self.titleCasting]; self.contentCasting.userInteractionEnabled = YES; self.realisateur = [self.movie getRealisateur]; if(self.realisateur != nil && self.realisateur.picture != nil && self.realisateur.picture.href != nil){ self.fond = [[UIView alloc]initWithFrame:CGRectMake(0,35,self.contentCasting.frame.size.width-20, 55)]; [self.fond setBackgroundColor:[UIColor blackColor]]; [self.contentCasting addSubview:self.fond]; self.fonction = [[UILabel alloc]initWithFrame:CGRectMake(5,5, 100, 15)]; [self.fonction setText:@"Réalisateur"]; self.fonction.textAlignment = NSTextAlignmentLeft; self.fonction.numberOfLines = 1 ; self.fonction.font = [UIFont fontWithName:LIGHT_ITALIC size:12]; [self.fonction setTextColor:[UIColor colorFromHexString:WHITE50]]; [self.fond addSubview:self.fonction]; self.nameRealisateur = [[UILabel alloc]initWithFrame:CGRectMake(5,25, 100, 15)]; [self.nameRealisateur setText:self.realisateur.person.name]; self.nameRealisateur.textAlignment = NSTextAlignmentLeft; self.nameRealisateur.numberOfLines = 1 ; self.nameRealisateur.font = [UIFont fontWithName:REGULAR size:13]; [self.nameRealisateur setTextColor:[UIColor whiteColor]]; [self.fond addSubview:self.nameRealisateur]; self.cercleFond = [[UIView alloc]initWithFrame:CGRectMake(self.contentCasting.frame.size.width-90,0,90, 90)]; self.cercleFond.center = CGPointMake(self.cercleFond.center.x, self.fond.center.y); [self.cercleFond setBackgroundColor:[UIColor colorFromHexString:WHITE30]]; self.cercleFond.layer.cornerRadius = 45; [self.contentCasting addSubview:self.cercleFond]; self.imageRealisateur = [[UIImageView alloc]initWithFrame:CGRectMake(0,15,80, 80)]; self.imageRealisateur.center = CGPointMake(self.cercleFond.center.x, self.fond.center.y); self.imageRealisateur.layer.masksToBounds = YES; self.imageRealisateur.layer.cornerRadius = 40; self.imageRealisateur.contentMode = UIViewContentModeScaleAspectFill; [self.imageRealisateur sd_setImageWithURL:[NSURL URLWithString:self.realisateur.picture.href]]; [self.contentCasting addSubview:self.imageRealisateur]; self.imageRealisateur.userInteractionEnabled = YES; [self.imageRealisateur addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickRealisateur:)]]; }else{ // Si il y a pas de réalisateur on cache la vue self.contentCasting.frame = CGRectMake(0,self.contentInfo.frame.origin.y + self.contentInfo.frame.size.height + MARGIN_TOP + 20,widthInsideScroll, 20); // [self.contentCasting setBackgroundColor:[UIColor redColor]]; } } self.contentCasting.frame = CGRectMake(self.contentCasting.frame.origin.x,self.contentCasting.frame.origin.y, self.contentCasting.frame.size.width,50); self.contentCasting.center = CGPointMake(self.center.x, self.contentCasting.center.y); self.scrollContent.userInteractionEnabled = YES; [self.scrollContent addSubview:self.contentCasting]; } -(void) chargerContentMembers{ if(self.realisateur != nil && self.realisateur.picture != nil && self.realisateur.picture.href != nil){ self.contentMembers = [[UIView alloc]initWithFrame:CGRectMake(0,self.contentCasting.frame.origin.y + self.contentCasting.frame.size.height + MARGIN_TOP + 30,widthInsideScroll, 100)]; }else{ self.contentMembers = [[UIView alloc]initWithFrame:CGRectMake(0,self.contentCasting.frame.origin.y + self.contentCasting.frame.size.height + MARGIN_TOP - 10,widthInsideScroll, 100)]; } self.contentMembers.center = CGPointMake(self.center.x, self.contentMembers.center.y); { self.castMembers = [self.movie getCastMember:3]; if([self.castMembers count] > 0){ [self.contentMembers addSubview:[self createViewMember:[self.castMembers objectAtIndex:0] andX:0 andY:0 andTag:0]]; if([self.castMembers count] > 1){ [self.contentMembers addSubview:[self createViewMember:[self.castMembers objectAtIndex:1] andX:0 andY:90 andTag:1 ]]; if([self.castMembers count] > 2){ [self.contentMembers addSubview:[self createViewMember:[self.castMembers objectAtIndex:2] andX:0 andY:180 andTag:2]]; self.plus_dashed_photos_white = [[UIImageView alloc]initWithFrame:CGRectMake(0, 270, 60, 80)]; self.plus_dashed_photos_white.image = [UIImage imageNamed:@"plus_dashed_photos_white.png"]; self.plus_dashed_photos_white.alpha = 0.2; [self.contentMembers addSubview:self.plus_dashed_photos_white]; self.plus_white = [[UIImageView alloc]initWithFrame:CGRectMake(0, 270, 20, 20)]; self.plus_white.contentMode = UIViewContentModeScaleAspectFit; self.plus_white.center = CGPointMake(self.plus_dashed_photos_white.center.x, self.plus_dashed_photos_white.center.y); self.plus_white.image = [UIImage imageNamed:@"plus_white.png"]; self.plus_white.alpha = 0.2; [self.contentMembers addSubview:self.plus_white]; self.plus_dashed_photos_white.userInteractionEnabled = YES; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onMoreStarClicked)]; [self.plus_dashed_photos_white addGestureRecognizer:tap]; } } } } self.contentMembers.frame = CGRectMake(self.contentMembers.frame.origin.x,self.contentMembers.frame.origin.y, self.contentMembers.frame.size.width,80 * 4 + 40); self.contentMembers.center = CGPointMake(self.center.x, self.contentMembers.center.y); [self.scrollContent addSubview:self.contentMembers]; } -(UIView *) createViewMember:(CastMember *)member andX:(int)x andY:(int) y andTag:(int)tag{ OCCastMember *view = [OCCastMember new]; view.member = member; view.delegate = self; view.tag = tag; view.frame = CGRectMake(x,y,widthInsideScroll,80); [view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickMember:)]]; return view; } - (void)clickMember:(UITapGestureRecognizer *)recognizer { CastMember * member = [self.castMembers objectAtIndex:recognizer.view.tag]; [self onStarClicked:member]; } -(void)onStarClicked:(CastMember *)member { PersonFull * person = [[PersonFull alloc]init]; person.activity = member.person.activity; person.picture = member.picture; Name * name = [[Name alloc]init]; name.family = member.person.name; name.given = @""; person.name = name; person.code = member.person.code; person.statistics = member.person.statistics; [self.delegate memberClicked:person]; } -(void)onMoreStarClicked { [self.delegate onMoreStarClicked]; } - (void)clickRealisateur:(UITapGestureRecognizer *)recognizer { [self onStarClicked:self.realisateur]; } - (void)resizeToFitSubviews:(UIView *)view { float h; for (UIView *v in [view subviews]) { float fh = v.frame.origin.y + v.frame.size.height; h = MAX(fh, h); } [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, h)]; } -(void)horairesClicked { [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ self.imageSalle.transform = CGAffineTransformMakeScale(1.3, 1.3); } completion:^(BOOL finished) { [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ self.imageSalle.transform = CGAffineTransformIdentity; } completion:^(BOOL finished) { [self.delegate horairesClicked]; }]; }]; } @end ================================================ FILE: ociney/src/View/MovieDetailTheaterList.h ================================================ // // MovieDetailTheaterList.h // ociney // // Created by florent champigny on 30/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "Theater.h" @protocol MovieDetailTheaterListDelegate -(void)didSelectTheater:(Theater*)theater; @end @interface MovieDetailTheaterList : UIView @property (strong,nonatomic) NSMutableArray* array; @property (strong,nonatomic) UITableView* tableView; @property (strong,nonatomic) id delegate; -(void)loadTheaters:(NSArray*)array; @end ================================================ FILE: ociney/src/View/MovieDetailTheaterList.m ================================================ // // MovieDetailTheaterList.m // ociney // // Created by florent champigny on 30/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "MovieDetailTheaterList.h" #import "SalleCell.h" #define IDENTIFIER_SALLE @"IDENTIFIER_SALLE" @implementation MovieDetailTheaterList { BOOL first; } -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:frame]) { first = YES; self.array = [NSMutableArray array]; } return self; } - (void)layoutSubviews { if(first){ first = NO; [self creer]; } } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; [self remplir]; } -(void)creer { [self addSubview:(self.tableView = [UITableView new])]; self.tableView.delegate = self; self.tableView.dataSource = self; self.tableView.backgroundColor = [UIColor clearColor]; self.backgroundColor = [UIColor blackColor]; self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; } -(void)remplir { self.tableView.frame = self.bounds; } -(void)loadTheaters:(NSArray *)array { [self.array addObjectsFromArray:array]; [self.tableView reloadData]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if(self.array == nil) return 0; else return self.array.count + 1; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:IDENTIFIER_SALLE]; if(cell == nil){ [tableView registerNib:[UINib nibWithNibName:@"SalleCell" bundle:nil] forCellReuseIdentifier:IDENTIFIER_SALLE]; cell = [tableView dequeueReusableCellWithIdentifier:IDENTIFIER_SALLE]; [cell awakeFromNib]; } cell.contentView.frame = CGRectMake(cell.contentView.frame.origin.x, cell.contentView.frame.origin.y, self.tableView.frame.size.width, cell.contentView.frame.size.height); cell.selectionStyle = UITableViewCellSelectionStyleNone; return cell; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return SALLE_CELL_HEIGHT; } - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath: (NSIndexPath *)indexPath{ SalleCell *s = (SalleCell*)cell; Theater * object = nil; if(indexPath.row < self.array.count) object = self.array[indexPath.row]; [s chargerAvecSalle:object]; } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self.delegate didSelectTheater:self.array[indexPath.row]]; } @end ================================================ FILE: ociney/src/View/OCCastMember.h ================================================ // // OCCastMember.h // ociney // // Created by florent champigny on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import #import "CastMember.h" #import "OCMovieDelegates.h" @interface OCCastMember : UIView @property (strong,nonatomic) UIView* content; @property (strong,nonatomic) UIView * fondJaquette; @property (strong,nonatomic) UIView * fondInformation; @property (strong,nonatomic) UIImageView * imageCast; @property (strong,nonatomic) UILabel * nomMember; @property (strong,nonatomic) UILabel * roles; @property (strong,nonatomic) CastMember* member; @property (strong,nonatomic) id delegate; -(void)loadMember:(CastMember*)member; @end ================================================ FILE: ociney/src/View/OCCastMember.m ================================================ // // OCCastMember.m // ociney // // Created by florent champigny on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import "OCCastMember.h" #import "Color+Hex.h" #import "UIImageView+WebCache.h" @implementation OCCastMember { BOOL first; BOOL placer; } -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:frame]) { first = YES; placer = YES; } return self; } - (void)layoutSubviews { [self creer]; } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; [self remplir]; } -(void)creer { if(first) { first = NO; [self addSubview:self.content = [UIView new]]; self.backgroundColor = [UIColor clearColor]; [self.content addSubview:self.fondJaquette = [UIView new]]; self.fondJaquette.backgroundColor = [UIColor colorFromHexString:WHITE20]; [self.content addSubview:self.fondInformation = [UIView new]]; self.fondInformation.backgroundColor = [UIColor colorFromHexString:BLACK50]; [self.content addSubview:self.imageCast = [UIImageView new]]; [self.fondInformation addSubview:self.nomMember = [UILabel new]]; self.nomMember.textAlignment = NSTextAlignmentLeft; self.nomMember.numberOfLines = 1 ; self.nomMember.font = [UIFont fontWithName:REGULAR size:11]; self.nomMember.textColor = [UIColor colorFromHexString:WHITE90]; [self.fondInformation addSubview:self.roles = [UILabel new]]; self.roles.textAlignment = NSTextAlignmentLeft; self.roles.numberOfLines = 1 ; self.roles.font = [UIFont fontWithName:LIGHT_ITALIC size:9]; self.roles.textColor = [UIColor colorFromHexString:WHITE50]; [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickMember)]]; } } -(void)placer { if(placer) { placer = NO; self.content.frame = CGRectMake(0, 0, self.bounds.size.width, 80); self.fondJaquette.frame = CGRectMake(0,0, 60, self.content.frame.size.height); self.fondInformation.frame = CGRectMake(60,25, self.content.frame.size.width - 60, 35); self.nomMember.frame = CGRectMake(5,5, self.fondInformation.frame.size.width - 10, 15); self.imageCast.frame = CGRectMake(5,5, 50, 70); self.roles.frame = CGRectMake(5,18, self.bounds.size.width - 60 - 10, 15); } } -(void)remplir { [self creer]; [self placer]; if(self.member == nil) self.content.hidden = YES; else self.content.hidden = NO; [self.imageCast sd_setImageWithURL:[NSURL URLWithString:self.member.picture.href]]; self.nomMember.text = self.member.person.name; self.roles.text = self.member.role; } -(void)clickMember { [self.delegate onStarClicked:self.member]; } -(void)loadMember:(CastMember*)member { self.member = member; [self remplir]; } @end ================================================ FILE: ociney/src/View/OCEmptyView.h ================================================ // // OCEmptyView.h // ociney // // Created by Kevin De Jesus Ferreira on 03/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import @interface OCEmptyView : UIView @property (strong,nonatomic) UIImageView * ic_in_app_big; @property (strong,nonatomic) UILabel * empty_message; @property (strong,nonatomic) CAGradientLayer * gradient; -(void)positionner; @end ================================================ FILE: ociney/src/View/OCEmptyView.m ================================================ // // OCEmptyView.m // ociney // // Created by Kevin De Jesus Ferreira on 03/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import "Color+Hex.h" #import "OCEmptyView.h" @implementation OCEmptyView -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:(CGRect)frame]){ { self.gradient = [CAGradientLayer layer]; self.gradient.colors = @[(id) [[UIColor colorFromHexString:@"#333333ff"] CGColor], (id) [[UIColor colorFromHexString:@"#555555ff"] CGColor]]; [self.layer insertSublayer:self.gradient atIndex:0]; } self.ic_in_app_big = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"ic_in_app_big.png"]]; self.ic_in_app_big.contentMode = UIViewContentModeScaleAspectFit; [self addSubview:self.ic_in_app_big]; self.empty_message = [UILabel new]; self.empty_message.textAlignment = NSTextAlignmentLeft; [self.empty_message setTextColor:[UIColor colorFromHexString:WHITE70]]; [self.empty_message setText:@"Aucun résultat trouvé"]; self.empty_message.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:12]; [self addSubview:self.empty_message]; } return self; } -(void)positionner { self.gradient.frame = self.bounds; self.ic_in_app_big.frame = CGRectMake(0, 0, 100, 50); self.ic_in_app_big.center = CGPointMake(self.frame.size.width/2, self.frame.size.height/2 - 10); self.empty_message.frame = CGRectMake(0, self.ic_in_app_big.frame.origin.y + self.ic_in_app_big.frame.size.height + 10, 200, 200); [self.empty_message sizeToFit]; self.empty_message.center = CGPointMake(self.frame.size.width/2, self.empty_message.center.y); } @end ================================================ FILE: ociney/src/View/OCEmptyViewGPS.h ================================================ // // OCEmptyViewGPS.h // ociney // // Created by Kevin De Jesus Ferreira on 03/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import @interface OCEmptyViewGPS : UIView @property (strong,nonatomic) UIImageView * arrow; @property (strong,nonatomic) UILabel * gps_not_found_message; -(void)positionner; @end ================================================ FILE: ociney/src/View/OCEmptyViewGPS.m ================================================ // // OCEmptyViewGPS.m // ociney // // Created by Kevin De Jesus Ferreira on 03/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import "OCEmptyViewGPS.h" #import "Color+Hex.h" @implementation OCEmptyViewGPS -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:(CGRect)frame]){ self.arrow = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"arrow.png"]]; self.arrow.contentMode = UIViewContentModeScaleAspectFit; [self addSubview:self.arrow]; self.gps_not_found_message = [UILabel new]; self.gps_not_found_message.textAlignment = NSTextAlignmentRight; self.gps_not_found_message.numberOfLines = 3; [self.gps_not_found_message setTextColor:[UIColor colorFromHexString:WHITE70]]; [self.gps_not_found_message setText:@"Nous n\'avons trouvé aucun cinéma, vous pouvez toujours en rechercher un !"]; self.gps_not_found_message.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:11]; [self addSubview:self.gps_not_found_message]; } return self; } -(void)positionner { self.arrow.frame = CGRectMake(self.frame.size.width - 50, 5, 50, 75); self.gps_not_found_message.frame = CGRectMake(self.arrow.frame.origin.x - 10 - 150, self.arrow.frame.origin.y + 5 , 150, 50); } @end ================================================ FILE: ociney/src/View/OCFilmoElement.h ================================================ // // OCFilmoElement.h // ociney // // Created by florent champigny on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #define FILMO_ELEMENT_TEXT_HEIGHT 20 #define FILMO_ELEMENT_IMAGE_HEIGHT 90 #define FILMO_ELEMENT_HEIGHT (FILMO_ELEMENT_IMAGE_HEIGHT+FILMO_ELEMENT_TEXT_HEIGHT) #define FILMO_ELEMENT_WIDTH 70 #import "Participation.h" #import "StarDetailDelegate.h" @class OCFilmoElement; @interface OCFilmoElement : UICollectionViewCell @property (strong,nonatomic) UIImageView *layout; @property (strong,nonatomic) UIImageView *background; @property (strong,nonatomic) UIView *gradient; @property (strong,nonatomic) UIImageView *image; @property (strong,nonatomic) UIImageView *glass; @property (strong,nonatomic) UILabel *titre; @property (strong,nonatomic) UILabel *role; @property (strong,nonatomic) id delegate; @property (assign,nonatomic) NSInteger index; @property (assign,nonatomic) BOOL more; @property (strong,nonatomic) Participation* participation; @end ================================================ FILE: ociney/src/View/OCFilmoElement.m ================================================ // // OCFilmoElement.m // ociney // // Created by florent champigny on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCFilmoElement.h" #import "Constantes.h" #import "Color+Hex.h" #import "UIImageView+WebCache.h" @implementation OCFilmoElement{ CAGradientLayer* gradientLayer; BOOL first; } -(id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; [self creer]; return self; } -(void)sizeToFit { [self remplir]; } -(void)creer { first = YES; self.userInteractionEnabled = YES; [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)]]; { self.layout = [[UIImageView alloc] initWithFrame:CGRectZero]; [self addSubview:self.layout]; self.layout.layer.masksToBounds = NO; self.layout.layer.shadowOffset = CGSizeMake(0.5, 0.5); //self.layout.layer.shadowRadius = 10; self.layout.layer.shadowOpacity = 0.5; } { self.gradient = [[UIView alloc] initWithFrame:CGRectZero]; self.gradient.layer.cornerRadius = 5.0; self.gradient.layer.masksToBounds = YES; [self.layout addSubview:self.gradient]; gradientLayer = [CAGradientLayer layer]; gradientLayer.colors = @[ (id)[[UIColor colorFromHexString:@"#4f4f4f"] CGColor], (id)[[UIColor colorFromHexString:@"#777777"] CGColor] ]; [self.gradient.layer insertSublayer:gradientLayer atIndex:0]; self.gradient.alpha = 0.8; } { //roulette self.background = [[UIImageView alloc] initWithFrame:CGRectZero]; self.background.image = [UIImage imageNamed:@"ic_drawer_films"]; self.background.alpha = 0.6; [self.gradient addSubview:self.background]; } self.image = [[UIImageView alloc] initWithFrame:CGRectZero]; self.image.contentMode = UIViewContentModeScaleAspectFill; [self.gradient addSubview:self.image]; self.glass = [[UIImageView alloc] initWithFrame:CGRectZero]; self.glass.image = [UIImage imageNamed:@"filmo_reflet"]; self.glass.contentMode = UIViewContentModeScaleAspectFill; self.glass.alpha = 0.4; [self.gradient addSubview:self.glass]; self.titre = [[UILabel alloc] initWithFrame:CGRectZero]; self.titre.font = [UIFont fontWithName:CONDENSED_BOLD size:7]; self.titre.textAlignment = NSTextAlignmentRight; self.titre.textColor = [UIColor blackColor]; [self addSubview:self.titre]; self.role = [[UILabel alloc] initWithFrame:CGRectZero]; self.role.font = [UIFont fontWithName:LIGHT size:8]; self.role.textAlignment = NSTextAlignmentRight; self.role.textColor = [UIColor colorFromHexString:BLACK70]; [self addSubview:self.role]; } -(void)positioner { if(first){ self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, FILMO_ELEMENT_WIDTH, FILMO_ELEMENT_HEIGHT); self.layout.frame = CGRectMake(0, 0, FILMO_ELEMENT_WIDTH - 10, FILMO_ELEMENT_IMAGE_HEIGHT - 10); self.layout.center = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2); self.gradient.frame = self.layout.bounds; gradientLayer.frame = self.gradient.bounds; self.background.frame = CGRectMake(0, 0, 38, 38); self.background.center = CGPointMake(self.layout.bounds.size.width/2, self.layout.bounds.size.height/2); self.titre.text = @" "; [self.titre sizeToFit]; self.titre.frame = CGRectMake(self.layout.frame.origin.x, self.layout.frame.origin.y + self.layout.frame.size.height+ 3, self.layout.frame.size.width, self.titre.frame.size.height); self.role.text = @" "; [self.role sizeToFit]; self.role.frame = CGRectMake(self.layout.frame.origin.x, self.titre.frame.origin.y + self.titre.frame.size.height, self.layout.frame.size.width, self.role.frame.size.height); self.glass.frame = self.layout.bounds; self.image.frame = self.layout.bounds; } } -(void)remplir { [self positioner]; self.hidden = NO; if(self.more){ self.image.image = [UIImage imageNamed:@"plus_black"]; self.image.alpha = 0.2; self.image.frame = CGRectMake(0, 0, 25, 25); self.image.center = CGPointMake(self.layout.frame.size.width/2, self.layout.frame.size.height/2); self.background.frame = self.layout.bounds; gradientLayer.hidden = YES; self.glass.hidden = YES; self.background.image = [UIImage imageNamed:@"plus_dashed_photos_black"]; self.background.contentMode = UIViewContentModeScaleToFill; self.background.alpha = 0.2; } else if(self.participation != nil && self.participation.movie != nil){ self.titre.text = self.participation.movie.title; self.role.text = self.participation.role; if(self.participation.movie.poster.href !=nil) { [self.image sd_setImageWithURL:[NSURL URLWithString:self.participation.movie.poster.href]]; } } else { self.hidden = YES; } } -(void)tap { if(self.delegate != nil){ if(self.more) [self.delegate onMoreMovieClicked]; else [self.delegate onMovieClicked:self.index]; } } @end ================================================ FILE: ociney/src/View/OCFilmoGridLayout.h ================================================ // // OCFilmoGridLayout.h // ociney // // Created by florent champigny on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "OCFilmoElement.h" #import "PersonFull.h" @interface OCFilmoGridLayout : UIView @property (strong,nonatomic) NSMutableArray* filmoArray; @property (strong,nonatomic) PersonFull* star; @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/View/OCFilmoGridLayout.m ================================================ // // OCFilmoGridLayout.m // ociney // // Created by florent champigny on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCFilmoGridLayout.h" @implementation OCFilmoGridLayout -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:frame]){ [self creer]; } return self; } -(void)sizeToFit { [super sizeToFit]; [self remplir]; } -(void)creer { self.filmoArray = [NSMutableArray array]; for(NSInteger i=0;i<8;++i){ OCFilmoElement* filmo = [[OCFilmoElement alloc] initWithFrame:CGRectZero]; [self addSubview:filmo]; [self.filmoArray addObject:filmo]; } } -(void)remplir { NSInteger nbPerLine = 4; NSInteger nbElement = self.filmoArray.count; NSInteger nbLine = nbElement / nbPerLine; NSInteger width = (NSInteger) self.bounds.size.width; NSInteger minWidth = FILMO_ELEMENT_WIDTH * nbPerLine; width = MAX(width,minWidth); NSInteger widthPerElement = width/nbPerLine; NSInteger heightPerElement = FILMO_ELEMENT_HEIGHT; NSInteger height = heightPerElement * nbLine; for(NSInteger i=0;i @interface OCHeaderVersionView : UIView @property (strong,nonatomic) UIImageView *imageView; -(id)initWithImage:(NSString*)image; -(void)tourner:(CGFloat)duration; -(void)arreterTourner; @end ================================================ FILE: ociney/src/View/OCHeaderVersionView.m ================================================ // // OCHeaderVersionView.m // ociney // // Created by florent champigny on 05/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import "OCHeaderVersionView.h" @implementation OCHeaderVersionView -(id)initWithImage:(NSString*)image { if(self = [super init]) { self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:image]]; [self addSubview:self.imageView]; self.imageView.contentMode = UIViewContentModeScaleAspectFit; } return self; } -(void)setFrame:(CGRect)frame { [super setFrame:frame]; self.imageView.frame = self.bounds; } -(void)tourner:(CGFloat)duration { [self runSpinAnimationOnView:self.imageView duration:duration rotations:1 repeat:0]; } -(void)arreterTourner { [self.imageView stopAnimating]; } - (void) runSpinAnimationOnView:(UIView*)view duration:(CGFloat)duration rotations:(CGFloat)rotations repeat:(float)repeat; { CABasicAnimation* rotationAnimation; rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; rotationAnimation.toValue = [NSNumber numberWithFloat: -1 * M_PI * 2.0 /* full rotation*/ * rotations * duration ]; rotationAnimation.duration = duration; rotationAnimation.cumulative = NO; rotationAnimation.repeatCount = repeat; [view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; } @end ================================================ FILE: ociney/src/View/OCLoader.h ================================================ // // OCLoader.h // ociney // // Created by florent champigny on 25/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import @interface OCLoader : UIImageView +(instancetype)loader; -(void)animer; @end ================================================ FILE: ociney/src/View/OCLoader.m ================================================ // // OCLoader.m // ociney // // Created by florent champigny on 25/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCLoader.h" @implementation OCLoader -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:(CGRect)frame]){ self.image = [UIImage imageNamed:@"ic_drawer_films.png"]; } return self; } +(instancetype)loader { return [[OCLoader alloc] initWithFrame:CGRectZero]; } -(void)animer { CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; [fullRotation setFromValue:@0.0F]; [fullRotation setToValue:@((float) ((2 * M_PI)))]; fullRotation.speed = 5.0f; fullRotation.duration = 5.5; fullRotation.repeatCount = 1; fullRotation.repeatCount = HUGE_VALF; [self.layer addAnimation:fullRotation forKey:@"transform.rotation"]; } @end ================================================ FILE: ociney/src/View/OCMovieBandeAnnonceSlider.h ================================================ // // OCMovieBandeAnnonceSlider.h // ociney // // Created by Kevin De Jesus Ferreira on 31/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "ViewPager.h" #import "Media.h" #import "Movie.h" #import "OCMovieDelegates.h" @interface OCMovieBandeAnnonceSlider : ViewPager @property (strong, nonatomic) NSMutableArray* ba; @property (strong,nonatomic) UIImageView * image; @property (strong,nonatomic) Movie * movie; @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/View/OCMovieBandeAnnonceSlider.m ================================================ // // OCMovieBandeAnnonceSlider.m // ociney // // Created by Kevin De Jesus Ferreira on 31/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCMovieBandeAnnonceSlider.h" #import "OCMovieBandeAnnonceSliderElement.h" #import float scrollParalax(SwipeView* swipeView, UIView *view) { int width = view.frame.size.width; float offset = swipeView.scrollOffset; offset = offset - (int)offset; CGFloat s = width* offset * 0.30; NSLog(@"%f",s); return s; } @implementation OCMovieBandeAnnonceSlider - (NSInteger)numberOfItemsInSwipeView:(SwipeView *)swipeView { return self.ba.count; } - (UIView *)swipeView:(SwipeView *)swipeView viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view { if(view == nil){ view = [[OCMovieBandeAnnonceSliderElement alloc] initWithFrame:self.swipeView.bounds]; } OCMovieBandeAnnonceSliderElement* v = (OCMovieBandeAnnonceSliderElement*)view; v.delegate = self.delegate; Media *ba = self.ba[index]; v.media = ba; NSString * t = ba.title; t = [t stringByReplacingOccurrencesOfString:self.movie.title withString:@""]; t = [t stringByReplacingOccurrencesOfString:self.movie.originalTitle withString:@""]; t = [t stringByReplacingOccurrencesOfString:@"\"\"" withString:@""]; t = [t stringByReplacingOccurrencesOfString:@":" withString:@""]; t = [t stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]]; //replace(movie.getTitle(), "").replace(movie.getOriginalTitle(), "").replace("\"\"", "").replace(":", "").trim() if ([t hasPrefix:@"-"]) { //do your stuff t = [t substringFromIndex:1]; t = [t stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; } v.titre.text = t; if(ba!=nil && ba.thumbnail != nil && ba.thumbnail.href != nil) [v.image sd_setImageWithURL:[[NSURL alloc] initWithString:ba.thumbnail.href]]; return view; } @end ================================================ FILE: ociney/src/View/OCMovieBandeAnnonceSliderElement.h ================================================ // // OCMovieBandeAnnonceSliderElement.h // ociney // // Created by florent champigny on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import #import "Media.h" #import "OCMovieDelegates.h" @interface OCMovieBandeAnnonceSliderElement : UIView @property (strong,nonatomic) UIView * warfog; @property (strong,nonatomic) UIImageView * image; @property (strong,nonatomic) UILabel * titre; @property (strong,nonatomic) UIView * filtre; @property (strong,nonatomic) UIImageView * play; @property (strong,nonatomic) UIView * backgroundTopBorder; @property (strong,nonatomic) UIView * backgroundBottomBorder; @property (strong,nonatomic) Media* media; @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/View/OCMovieBandeAnnonceSliderElement.m ================================================ // // OCMovieBandeAnnonceSliderElement.m // ociney // // Created by florent champigny on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import "OCMovieBandeAnnonceSliderElement.h" #import #import "Color+Hex.h" #import "Constantes.h" @implementation OCMovieBandeAnnonceSliderElement { BOOL firstCreer; BOOL firstPlacer; } -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:frame]) { firstPlacer = YES; firstCreer = YES; } return self; } - (void)layoutSubviews { [super layoutSubviews]; if(firstCreer){ firstCreer = NO; [self creer]; } } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; [self remplir]; } -(void)creer { self.backgroundColor = [UIColor blackColor]; self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.clipsToBounds =YES; [self addSubview:(self.warfog = [UIView new])]; self.warfog.backgroundColor = [UIColor colorFromHexString:BLACK50]; [self addSubview:(self.image = [UIImageView new])]; self.image.backgroundColor = [UIColor clearColor]; self.image.contentMode = UIViewContentModeScaleAspectFill; [self addSubview:(self.titre = [UILabel new])]; self.titre.numberOfLines = 2; self.titre.textAlignment = NSTextAlignmentCenter; self.titre.textColor = [UIColor whiteColor]; self.titre.font = [UIFont fontWithName:THIN size:15]; [self addSubview:(self.filtre = [UIView new])]; [self.filtre setBackgroundColor:[UIColor colorFromHexString:BLACK50]]; [self addSubview:(self.play = [UIImageView new])]; [self addSubview:(self.backgroundTopBorder = [UIView new])]; self.backgroundTopBorder.backgroundColor =[UIColor colorFromHexString:BLACK50]; [self addSubview:(self.backgroundBottomBorder = [UIView new])]; self.backgroundBottomBorder.backgroundColor = [UIColor colorFromHexString:BLACK50]; } -(void)placer { if(firstPlacer){ firstPlacer = NO; self.warfog.frame =CGRectMake(0, 0,self.frame.size.width, 250); self.warfog.center = CGPointMake(self.frame.size.width/2, self.frame.size.height/2); self.image.frame = CGRectMake(0, 0, self.frame.size.width-10, 150); self.image.center = CGPointMake(self.frame.size.width/2, self.frame.size.height/2); self.titre.frame = CGRectMake(0, 30, 150, 150); self.titre.center = CGPointMake(self.frame.size.width/2,self.titre.center.y); self.filtre.frame= self.bounds; self.play.frame = CGRectMake(0, 0, 70, 70); self.play.center = CGPointMake(self.frame.size.width/2, self.frame.size.height/2); self.play.image = [UIImage imageNamed:@"play.png"]; int pelliculeHeight = 45; self.backgroundTopBorder.frame = CGRectMake(0, self.warfog.frame.origin.y, self.frame.size.width, pelliculeHeight); self.backgroundBottomBorder.frame = CGRectMake(0, self.warfog.frame.origin.y + self.warfog.frame.size.height - pelliculeHeight, self.frame.size.width, pelliculeHeight); for(int i=0;i #import "Movie.h" #import "OCMovieDelegates.h" @interface OCMovieDetailStarList : UIView @property (strong,nonatomic) Movie* movie; @property (strong,nonatomic) UITableView* tableView; @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/View/OCMovieDetailStarList.m ================================================ // // OCMovieDetailStarList.m // ociney // // Created by florent champigny on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #import "OCMovieDetailStarList.h" #import "OCCastMember.h" #define CELL_TAG @"OCMovieDetailStarList" #define VIEW_TAG 10 #define CELL_HEIGHT 80 @implementation OCMovieDetailStarList { BOOL first; } -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:frame]) { first = YES; } return self; } - (void)layoutSubviews { [self creer]; } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; [self remplir]; } -(void)creer { if(first){ first = NO; self.backgroundColor = [UIColor blackColor]; [self addSubview:self.tableView = [UITableView new]]; self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; self.tableView.delegate = self; self.tableView.dataSource = self; self.tableView.backgroundColor = [UIColor blackColor]; [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CELL_TAG]; } } -(void)remplir { self.tableView.frame = CGRectMake(0, 0, self.bounds.size.width-50, self.bounds.size.height); self.tableView.center = CGPointMake(self.bounds.size.width/2, self.tableView.center.y); } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if(self.movie != nil && self.movie.castMember!= nil) return self.movie.castMember.count + 2; else return 0; } -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_TAG]; OCCastMember* castView = (OCCastMember*)[cell viewWithTag:VIEW_TAG]; if(castView == nil) { castView = [OCCastMember new]; castView.tag = VIEW_TAG; castView.delegate = self.delegate; [cell addSubview:castView]; cell.backgroundColor = [UIColor clearColor]; castView.backgroundColor = [UIColor blackColor]; castView.frame = CGRectMake(0, 0, tableView.frame.size.width, CELL_HEIGHT); } if(indexPath.row #import "ViewPager.h" #import "Movie.h" @interface OCMovieViewPager : ViewPager @property (strong, nonatomic) Movie *movie; @property (strong, nonatomic) NSMutableArray* urlImages; @end ================================================ FILE: ociney/src/View/OCMovieViewPager.m ================================================ // // Created by florent champigny on 23/12/14. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "OCMovieViewPager.h" #import "Person.h" @implementation OCMovieViewPager - (NSInteger)numberOfItemsInSwipeView:(SwipeView *)swipeView { self.urlImages = [self.movie getUrlImages]; return self.urlImages.count; } - (UIView *)swipeView:(SwipeView *)swipeView viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view { if(view == nil){ view = [[UIImageView alloc] initWithFrame:self.swipeView.bounds]; view.backgroundColor = [UIColor whiteColor]; view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; } UIImageView *image = (UIImageView*)view; NSString *urlImage = self.urlImages[index]; image.backgroundColor = [UIColor blackColor]; image.contentMode = UIViewContentModeScaleAspectFit; if(urlImage!=nil) [image sd_setImageWithURL:[[NSURL alloc] initWithString:urlImage]]; return view; } @end ================================================ FILE: ociney/src/View/OCStarFilmoGrid.h ================================================ // // OCStarFilmoGrid.h // ociney // // Created by florent champigny on 29/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "PersonFull.h" #import "StarDetailDelegate.h" @interface OCStarFilmoGrid : UIView @property (strong,nonatomic) PersonFull* star; @property (strong,nonatomic) UICollectionView *collectionView; -(void)loadStarFull:(PersonFull*)starFull; @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/View/OCStarFilmoGrid.m ================================================ // // OCStarFilmoGrid.m // ociney // // Created by florent champigny on 29/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCStarFilmoGrid.h" #import "OCFilmoElement.h" #import "Color+Hex.h" #import "Constantes.h" #define CELL_ID @"OCStarFilmoGridCell" @implementation OCStarFilmoGrid - (void)drawRect:(CGRect)rect { [super drawRect:rect]; [self creer]; } -(void)setFrame:(CGRect)frame { [super setFrame:frame]; [self remplir]; } -(void)creer { UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init]; [flow setItemSize:CGSizeMake(FILMO_ELEMENT_WIDTH, FILMO_ELEMENT_HEIGHT)]; [flow setScrollDirection:UICollectionViewScrollDirectionVertical]; self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flow]; self.collectionView.delegate = self; self.collectionView.dataSource = self; [self.collectionView registerClass:[OCFilmoElement class] forCellWithReuseIdentifier:CELL_ID]; [self addSubview:self.collectionView]; self.backgroundColor = [UIColor colorFromHexString:BACKGROUND_WHITE_GRAY]; self.collectionView.backgroundColor = [UIColor colorFromHexString:BACKGROUND_WHITE_GRAY]; } -(void)remplir { { int margin = 30; int x = 0; int y = 0; int width = self.bounds.size.width - margin*2; int height = self.bounds.size.height; self.collectionView.frame = CGRectMake(x, y, width, height); self.collectionView.center = CGPointMake(self.bounds.size.width/2, self.collectionView.center.y); } } -(void)loadStarFull:(PersonFull*)starFull { self.star = starFull; [self remplir]; [self.collectionView reloadData]; } #pragma mark - UICollectionViewDataSource - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { if(self.star == nil) return 0; else return self.star.participation.count + 4; } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CELL_ID forIndexPath:indexPath]; Participation *participation = nil; if(indexPath.row < self.star.participation.count) participation = [self.star.participation objectAtIndex:(NSUInteger) indexPath.row]; ((OCFilmoElement*)cell).participation = participation; ((OCFilmoElement*)cell).delegate = self.delegate; ((OCFilmoElement*)cell).index = indexPath.row; [cell sizeToFit]; return cell; } @end ================================================ FILE: ociney/src/View/OCStarPhoto.h ================================================ // // OCStarPhoto.h // ociney // // Created by florent champigny on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import @interface OCStarPhoto : UIView @property (retain,nonatomic) UIImageView *image; @property (retain,nonatomic) UIImageView *background; @property (retain,nonatomic) UIImageView *glass; @property (assign,nonatomic) NSInteger padding; -(void)ajouterOmbre; -(void)loadImageUrl:(NSString*)url; @end ================================================ FILE: ociney/src/View/OCStarPhoto.m ================================================ // // OCStarPhoto.m // ociney // // Created by florent champigny on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCStarPhoto.h" #import "UIImageView+WebCache.h" @implementation OCStarPhoto -(void)setFrame:(CGRect)frame { [super setFrame:frame]; self.bounds = CGRectMake(self.padding, self.padding, self.frame.size.width-self.padding*2, self.frame.size.height-self.padding*2); self.background.frame = self.bounds; self.image.frame = self.bounds; self.glass.frame = self.bounds; [self vider]; } -(id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; self.clipsToBounds = YES; self.background = [UIImageView new]; self.background.contentMode = UIViewContentModeScaleAspectFit; self.background.clipsToBounds = YES; [self addSubview:self.background]; self.image = [UIImageView new]; self.image.contentMode = UIViewContentModeScaleAspectFill; self.image.clipsToBounds = YES; [self addSubview:self.image]; self.glass = [UIImageView new]; self.glass.contentMode = UIViewContentModeScaleAspectFill; self.glass.clipsToBounds = YES; self.glass.image = [UIImage imageNamed:@"filmo_reflet"]; [self addSubview:self.glass]; self.background.alpha = 0.5; self.image.alpha = 0.8; self.glass.alpha = 0.8; return self; } -(void)vider { //self.image = nil; self.background = nil; self.glass = nil; } -(void)ajouterOmbre{ self.layer.masksToBounds = NO; self.layer.shadowOffset = CGSizeMake(0, 1); self.layer.shadowRadius = 5; self.layer.shadowOpacity = 0.5; } -(void)loadImageUrl:(NSString*)url { [self.image sd_setImageWithURL:[[NSURL alloc] initWithString:url] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { self.image = nil; }]; } @end ================================================ FILE: ociney/src/View/OCStarViewPager.h ================================================ // // Created by florent champigny on 23/12/14. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "ViewPager.h" #import "Person.h" @interface OCStarViewPager : ViewPager @property (strong, nonatomic) Person *star; @end ================================================ FILE: ociney/src/View/OCStarViewPager.m ================================================ // // Created by florent champigny on 23/12/14. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "OCStarViewPager.h" #import "Person.h" @implementation OCStarViewPager - (NSInteger)numberOfItemsInSwipeView:(SwipeView *)swipeView { if(self.star != nil && self.star.media != nil){ return self.star.media.count; } return 0; } - (UIView *)swipeView:(SwipeView *)swipeView viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view { if(view == nil){ view = [[UIImageView alloc] initWithFrame:self.swipeView.bounds]; view.backgroundColor = [UIColor whiteColor]; view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; } UIImageView *image = (UIImageView*)view; Media *media = self.star.media[index]; image.backgroundColor = [UIColor blackColor]; image.contentMode = UIViewContentModeScaleAspectFit; if(media.thumbnail.href!=nil) [image sd_setImageWithURL:[[NSURL alloc] initWithString:media.thumbnail.href]]; return view; } @end ================================================ FILE: ociney/src/View/PosterView.h ================================================ // // Poster.h // ociney // // Created by Kevin De Jesus Ferreira on 02/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "Movie.h" @interface PosterView : UIView @property (strong,nonatomic) Movie * movie; @property (strong,nonatomic) UIView * content; @property (strong,nonatomic) UIImageView * woodframe; @property (strong,nonatomic) UIImageView * charniereHaute; @property (strong,nonatomic) UIImageView * charniereBasse; @property (strong,nonatomic) UIImageView * serrure; @property (strong,nonatomic) UIImageView * longShaddow; @property (strong,nonatomic) UIImageView * poster; @property (strong,nonatomic) UILabel * title; // Content WoodFrame @property (strong,nonatomic) UIView * contentWoodFrame; @property (strong,nonatomic) UIView * bg_darker_poster; @property (strong,nonatomic) UIImageView * folded_effect; @property (strong,nonatomic) UIView * gradient_window_view; @property (strong,nonatomic) CAGradientLayer * gradient_window; @property (strong,nonatomic) UIImageView * reflet_framewood; @property (strong,nonatomic) UIView * fondBlack; -(void)chargerAvecMovie:(Movie *)movie; @end ================================================ FILE: ociney/src/View/PosterView.m ================================================ // // Poster.m // ociney // // Created by Kevin De Jesus Ferreira on 02/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "PosterView.h" #import "Color+Hex.h" #import "UIImageView+WebCache.h" #import "Horaires.h" @implementation PosterView -(void)chargerAvecMovie:(Movie *)movie{ self.movie = movie; [self setNeedsLayout]; } - (void)layoutSubviews{ self.content = [[UIView alloc]initWithFrame:self.bounds]; { self.contentWoodFrame = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 212, 255)]; self.contentWoodFrame.center = CGPointMake(self.content.center.x, self.content.center.y); [self.contentWoodFrame setBackgroundColor:[UIColor colorFromHexString:@"#363636"]]; { self.bg_darker_poster = [[UIView alloc]initWithFrame:CGRectMake(20, 10, self.contentWoodFrame.frame.size.width - 43 , self.contentWoodFrame.frame.size.height - 15)]; [self.bg_darker_poster setBackgroundColor:[UIColor whiteColor]]; { self.poster = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, self.bg_darker_poster.frame.size.width - 5, self.bg_darker_poster.frame.size.height - 5)]; self.poster.center = CGPointMake(self.bg_darker_poster.frame.size.width/2, self.bg_darker_poster.frame.size.height/2); [self.poster sd_setImageWithURL:[NSURL URLWithString:self.movie.poster.href]]; self.poster.contentMode = UIViewContentModeScaleAspectFill; self.poster.clipsToBounds = YES; [self.bg_darker_poster addSubview:self.poster]; self.folded_effect = [[UIImageView alloc]initWithFrame:self.bg_darker_poster.bounds]; self.folded_effect.image = [UIImage imageNamed:@"folded_effect.png"]; self.folded_effect.contentMode = UIViewContentModeScaleAspectFit; [self.bg_darker_poster addSubview:self.folded_effect]; } [self.contentWoodFrame addSubview:self.bg_darker_poster]; self.fondBlack = [[UIView alloc]initWithFrame:CGRectMake(0,self.contentWoodFrame.frame.size.height - 30, self.contentWoodFrame.frame.size.width, 30)]; [self.fondBlack setBackgroundColor:[UIColor blackColor]]; [self.contentWoodFrame addSubview:self.fondBlack]; // Gradient Window { self.gradient_window_view = [[UIView alloc]initWithFrame:self.contentWoodFrame.bounds]; self.gradient_window_view.alpha = 0.2; [self.contentWoodFrame addSubview:self.gradient_window_view]; self.gradient_window = [CAGradientLayer layer]; self.gradient_window.frame = self.gradient_window_view.bounds; self.gradient_window.startPoint = CGPointMake(0.0, 0.5); self.gradient_window.endPoint = CGPointMake(1.0, 0.5); self.gradient_window.colors = [NSArray arrayWithObjects:(id)[[UIColor clearColor] CGColor], (id)[[UIColor colorFromHexString:@"#83e4efff"] CGColor], nil]; [self.gradient_window_view.layer insertSublayer:self.gradient_window atIndex:0]; } { self.reflet_framewood = [[UIImageView alloc]initWithFrame:CGRectMake(self.contentWoodFrame.frame.size.width - 160, 0, self.contentWoodFrame.frame.size.width,self.contentWoodFrame.frame.size.height)]; self.reflet_framewood.image = [UIImage imageNamed:@"reflet_framewood.png"]; self.reflet_framewood.contentMode = UIViewContentModeScaleAspectFit; [self.contentWoodFrame addSubview:self.reflet_framewood]; } } [self.content addSubview:self.contentWoodFrame]; self.woodframe = [[UIImageView alloc]initWithFrame:CGRectMake(0,15, 295, 295)]; self.woodframe.center = CGPointMake(self.content.center.x, self.content.center.y); self.woodframe.image = [UIImage imageNamed:@"wood_frame.png"]; self.woodframe.contentMode = UIViewContentModeScaleAspectFit; [self.content addSubview:self.woodframe]; self.longShaddow = [[UIImageView alloc]initWithFrame:CGRectMake(10,15, 295, 295)]; self.longShaddow.center = CGPointMake(self.content.center.x+10, self.content.center.y); self.longShaddow.image = [UIImage imageNamed:@"long_shadow.png"]; self.longShaddow.contentMode = UIViewContentModeScaleAspectFit; [self.content addSubview:self.longShaddow]; self.charniereHaute = [[UIImageView alloc]initWithFrame:CGRectMake(self.woodframe.frame.origin.x + 10,self.woodframe.frame.origin.y + 30, 50, 50)]; self.charniereHaute.image = [UIImage imageNamed:@"charniere.png"]; self.charniereHaute.contentMode = UIViewContentModeScaleAspectFit; [self.content addSubview:self.charniereHaute]; self.charniereBasse = [[UIImageView alloc]initWithFrame:CGRectMake(self.charniereHaute.frame.origin.x,self.woodframe.frame.origin.y + self.woodframe.frame.size.height - 30 - self.charniereHaute.frame.size.height,self.charniereHaute.frame.size.width,self.charniereHaute.frame.size.height)]; self.charniereBasse.image = [UIImage imageNamed:@"charniere.png"]; self.charniereBasse.contentMode = UIViewContentModeScaleAspectFit; [self.content addSubview:self.charniereBasse]; self.serrure = [[UIImageView alloc]initWithFrame:CGRectMake(self.woodframe.frame.origin.x + self.woodframe.frame.size.width - 52,self.woodframe.frame.origin.y + self.woodframe.frame.size.height/2,10,10)]; self.serrure.image = [UIImage imageNamed:@"serrure.png"]; self.serrure.contentMode = UIViewContentModeScaleAspectFit; [self.content addSubview:self.serrure]; { self.title = [[UILabel alloc]initWithFrame:CGRectMake(70,- 15, 140, 50)]; self.title.textAlignment = NSTextAlignmentCenter; NSString * titre = self.movie.title; [self.title setText:[titre uppercaseString]]; [self.title setTextColor:[UIColor colorFromHexString:@"#9b7144ff"]]; self.title.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:9]; [self.woodframe addSubview:self.title]; } [self chargerHoraires]; } [self addSubview:self.content]; } -(void) chargerHoraires { int y = 5; int heigthVue = 20; for (Horaires * h in self.movie.horaires) { if ([h isToday]) { UIView * vueHorraires = [[UIView alloc]initWithFrame:CGRectMake(0, y, self.fondBlack.frame.size.width, heigthVue)]; UIImageView * version = [[UIImageView alloc]initWithFrame:CGRectMake(20, 0, 20, 20)]; version.contentMode = UIViewContentModeScaleAspectFit; if ([h.formatEcran containsString:@"3D"]) version.image = [UIImage imageNamed:@"ic_version_white_3d.png"]; else if ([h.formatEcran containsString:@"Numérique"]) version.image = [UIImage imageNamed:@"ic_version_white_2d.png"]; else if (![h.formatEcran containsString:@"Français"]) version.image = [UIImage imageNamed:@"ic_version_white_vo.png"]; else version.frame = CGRectZero; NSString * sb = @""; for (NSString * seance in h.seances){ sb = [sb stringByAppendingString:seance]; sb = [sb stringByAppendingString:@" "]; } UILabel * texte = [[UILabel alloc]initWithFrame:CGRectMake(heigthVue + 30, 4, 200, 200)]; texte.textColor = [UIColor colorFromHexString:WHITE90]; //texte.center = CGPointMake(texte.center.x, version.center.y); texte.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:10]; [texte setText:sb]; [texte sizeToFit]; //layout.addView(vueHorraires); [vueHorraires addSubview:version]; [vueHorraires addSubview:texte]; [self.fondBlack addSubview:vueHorraires]; //[self.fondBlack addSubview:texte]; y+= heigthVue; } } self.fondBlack.frame = CGRectMake(self.fondBlack.frame.origin.x, self.fondBlack.frame.origin.y - y + heigthVue + 5, self.fondBlack.frame.size.width, y + 5); } @end ================================================ FILE: ociney/src/View/StarDetail.h ================================================ // // StarDetail.h // ociney // // Created by florent champigny on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "PersonFull.h" #import "StarDetailPhotos.h" #import "OCFilmoGridLayout.h" #import "StarDetailDelegate.h" @interface StarDetail : UIView @property (strong,nonatomic) id delegate; @property (strong,nonatomic) PersonFull* star; @property (retain,nonatomic) UIView* contentView; @property (retain,nonatomic) UIScrollView* scrollView; @property (retain,nonatomic) UILabel* labelDateNaissance; @property (retain,nonatomic) UILabel* labelDateNaissanceValeur; @property (retain,nonatomic) UILabel* labelLieuNaissance; @property (retain,nonatomic) UILabel* labelLieuNaissanceValeur; @property (retain,nonatomic) UILabel* labelActivites; @property (retain,nonatomic) UILabel* labelActivitesValeur; @property (retain,nonatomic) UILabel* separateurBiographie; @property (retain,nonatomic) UILabel* biographie; @property (retain,nonatomic) UILabel* separateurFilmographie; @property (retain,nonatomic) OCFilmoGridLayout* filmographieLayout; @property (retain,nonatomic) UILabel* separateurPhotos; @property (retain,nonatomic) StarDetailPhotos* photosLayout; -(void)loadStarFull:(PersonFull*)starFull; @end ================================================ FILE: ociney/src/View/StarDetail.m ================================================ // // StarDetail.m // ociney // // Created by florent champigny on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "StarDetail.h" #import "Color+Hex.h" #import "DateUtils.h" @implementation StarDetail { NSInteger globalY; BOOL firstRemplir; } -(id)initWithFrame:(CGRect)frame{ if(self = [super initWithFrame:frame]) { firstRemplir = YES; } return self; } -(void)creer { self.backgroundColor = [UIColor colorFromHexString:BACKGROUND_WHITE_GRAY]; self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectZero]; self.scrollView.backgroundColor = [UIColor clearColor]; self.scrollView.bounces = NO; [self addSubview:self.scrollView]; self.contentView = [[UIView alloc] initWithFrame:CGRectZero]; self.contentView.backgroundColor = [UIColor clearColor]; [self.scrollView addSubview:self.contentView]; { self.labelDateNaissance = [[UILabel alloc] initWithFrame:CGRectZero]; self.labelDateNaissance.textColor = [UIColor colorFromHexString:BLACK50]; self.labelDateNaissance.font = [UIFont fontWithName:LIGHT size:12]; self.labelDateNaissance.text = NSLocalizedString(@"date_naissance", nil); [self.contentView addSubview:self.labelDateNaissance]; } { self.labelLieuNaissance = [[UILabel alloc] initWithFrame:CGRectZero]; self.labelLieuNaissance.textColor = [UIColor colorFromHexString:BLACK50]; self.labelLieuNaissance.font = [UIFont fontWithName:LIGHT size:12]; self.labelLieuNaissance.text = NSLocalizedString(@"lieu_naissance", nil); [self.contentView addSubview:self.labelLieuNaissance]; } { self.labelActivites = [[UILabel alloc] initWithFrame:CGRectZero]; self.labelActivites.textColor = [UIColor colorFromHexString:BLACK50]; self.labelActivites.font = [UIFont fontWithName:LIGHT size:12]; self.labelActivites.text = NSLocalizedString(@"activités", nil); [self.contentView addSubview:self.labelActivites]; } { self.labelDateNaissanceValeur = [[UILabel alloc] initWithFrame:CGRectZero]; self.labelDateNaissanceValeur.textColor = [UIColor blackColor]; self.labelDateNaissanceValeur.textAlignment = NSTextAlignmentRight; self.labelDateNaissanceValeur.font = [UIFont fontWithName:BOLD size:11]; [self.contentView addSubview:self.labelDateNaissanceValeur]; } { self.labelLieuNaissanceValeur = [[UILabel alloc] initWithFrame:CGRectZero]; self.labelLieuNaissanceValeur.textColor = [UIColor blackColor]; self.labelLieuNaissanceValeur.textAlignment = NSTextAlignmentRight; self.labelLieuNaissanceValeur.lineBreakMode = NSLineBreakByWordWrapping; self.labelLieuNaissanceValeur.numberOfLines = 0; self.labelLieuNaissanceValeur.font = [UIFont fontWithName:BOLD size:11]; [self.contentView addSubview:self.labelLieuNaissanceValeur]; } { self.labelActivitesValeur = [[UILabel alloc] initWithFrame:CGRectZero]; self.labelActivitesValeur.textColor = [UIColor blackColor]; self.labelActivitesValeur.textAlignment = NSTextAlignmentRight; self.labelActivitesValeur.lineBreakMode = NSLineBreakByWordWrapping; self.labelActivitesValeur.numberOfLines = 0; self.labelActivitesValeur.font = [UIFont fontWithName:BOLD size:11]; [self.contentView addSubview:self.labelActivitesValeur]; } { self.biographie = [[UILabel alloc] initWithFrame:CGRectZero]; self.biographie.backgroundColor = [UIColor clearColor]; self.biographie.textColor = [UIColor colorFromHexString:BLACK90]; self.biographie.textAlignment = NSTextAlignmentJustified; self.biographie.font = [UIFont fontWithName:REGULAR size:12]; self.biographie.numberOfLines = 0; self.biographie.lineBreakMode = NSLineBreakByWordWrapping; [self.contentView addSubview:self.biographie]; } { self.separateurBiographie = [[UILabel alloc] initWithFrame:CGRectZero]; self.separateurBiographie.textColor = [UIColor colorFromHexString:BLACK20]; self.separateurBiographie.textAlignment = NSTextAlignmentCenter; self.separateurBiographie.font = [UIFont fontWithName:BLACK size:25]; self.separateurBiographie.text = [NSLocalizedString(@"biographie", nil) uppercaseString]; [self.contentView addSubview:self.separateurBiographie]; } { self.filmographieLayout = [[OCFilmoGridLayout alloc] initWithFrame:CGRectZero]; [self.contentView addSubview:self.filmographieLayout]; } { self.separateurFilmographie = [[UILabel alloc] initWithFrame:CGRectZero]; self.separateurFilmographie.textColor = [UIColor colorFromHexString:BLACK20]; self.separateurFilmographie.textAlignment = NSTextAlignmentCenter; self.separateurFilmographie.font = [UIFont fontWithName:BLACK size:25]; self.separateurFilmographie.text = [NSLocalizedString(@"filmographie", nil) uppercaseString]; [self.contentView addSubview:self.separateurFilmographie]; } { self.photosLayout = [[StarDetailPhotos alloc] initWithFrame:CGRectZero]; [self.contentView addSubview:self.photosLayout]; } { self.separateurPhotos = [[UILabel alloc] initWithFrame:CGRectZero]; self.separateurPhotos.textColor = [UIColor colorFromHexString:BLACK20]; self.separateurPhotos.textAlignment = NSTextAlignmentCenter; self.separateurPhotos.font = [UIFont fontWithName:BLACK size:25]; self.separateurPhotos.text = [NSLocalizedString(@"photos", nil) uppercaseString]; [self.contentView addSubview:self.separateurPhotos]; } } -(void)remplir { if(firstRemplir) { if(self.labelDateNaissance == nil) [self creer]; globalY = 0; NSInteger globalX = 20; NSInteger margins = 15; if(self.star != nil){ { NSInteger marginTop = margins + 5; NSInteger y = globalY+marginTop; NSInteger x = globalX; NSInteger width = 100; NSInteger height = 0; self.labelDateNaissance.frame = CGRectMake(x, y, width, height); [self.labelDateNaissance sizeToFit]; globalY += self.labelDateNaissance.frame.size.height+marginTop; } { int marginRight = 20; NSInteger y = (NSInteger) self.labelDateNaissance.frame.origin.y; NSInteger x = (NSInteger) (self.labelDateNaissance.frame.origin.x + self.labelDateNaissance.frame.size.width); NSInteger width = (NSInteger) (self.frame.size.width - x - marginRight); NSInteger height = 0; self.labelDateNaissanceValeur.frame = CGRectMake(x, y, width, height); self.labelDateNaissanceValeur.text = [DateUtils formatBithDate:self.star.birthDate]; [self.labelDateNaissanceValeur sizeToFit]; self.labelDateNaissanceValeur.frame = CGRectMake(x, y, width, self.labelDateNaissanceValeur.frame.size.height); } { NSInteger marginTop = margins; NSInteger y = globalY+marginTop; NSInteger x = globalX; NSInteger width = 100; NSInteger height = 0; self.labelLieuNaissance.frame = CGRectMake(x, y, width, height); [self.labelLieuNaissance sizeToFit]; } { int marginRight = 20; NSInteger y = (NSInteger) self.labelLieuNaissance.frame.origin.y; NSInteger x = (NSInteger) (self.labelLieuNaissance.frame.origin.x + self.labelLieuNaissance.frame.size.width); NSInteger width = (NSInteger) (self.frame.size.width - x - marginRight); NSInteger height = 0; self.labelLieuNaissanceValeur.frame = CGRectMake(x, y, width, height); self.labelLieuNaissanceValeur.text = self.star.birthPlace; [self.labelLieuNaissanceValeur sizeToFit]; self.labelLieuNaissanceValeur.frame = CGRectMake(x, y, width, self.labelLieuNaissanceValeur.frame.size.height); globalY = MAX( self.labelLieuNaissance.frame.size.height+self.labelLieuNaissance.frame.origin.y, self.labelLieuNaissanceValeur.frame.size.height+self.labelLieuNaissanceValeur.frame.origin.y ) ; } { NSInteger marginTop = margins; NSInteger y = globalY+marginTop; NSInteger x = globalX; NSInteger width = 100; NSInteger height = 0; self.labelActivites.frame = CGRectMake(x, y, width, height); [self.labelActivites sizeToFit]; } { int marginRight = 20; NSInteger y = (NSInteger) self.labelActivites.frame.origin.y; NSInteger x = (NSInteger) (self.labelActivites.frame.origin.x + self.labelActivites.frame.size.width); NSInteger width = (NSInteger) (self.frame.size.width - x - marginRight); NSInteger height = 0; self.labelActivitesValeur.frame = CGRectMake(x, y, width, height); self.labelActivitesValeur.text = [self.star getActivities]; [self.labelActivitesValeur sizeToFit]; self.labelActivitesValeur.frame = CGRectMake(x, y, width, self.labelActivitesValeur.frame.size.height); globalY += MAX(self.labelActivites.frame.size.height,self.labelActivitesValeur.frame.size.height); } globalY += margins*2; if(self.star.biography != nil){ { NSInteger y = globalY; NSInteger x = 0; //center NSInteger width = 150; NSInteger height = 0; self.separateurBiographie.frame = CGRectMake(x, y, width, height); [self.separateurBiographie sizeToFit]; self.separateurBiographie.frame = CGRectMake(x, y, width, self.separateurBiographie.frame.size.height); self.separateurBiographie.center = CGPointMake(self.frame.size.width/2, self.separateurBiographie.center.y); globalY = (NSInteger) (self.separateurBiographie.frame.origin.y + self.separateurBiographie.frame.size.height); } } globalY += margins; { NSInteger margin = 10; NSInteger y = globalY; NSInteger x = 0; NSInteger width = (NSInteger) (self.frame.size.width - globalX - margin*2); NSInteger height = 0; self.biographie.frame = CGRectMake(x, y, width, height); if(self.star.biography != nil){ self.biographie.text = self.star.biography; NSString *s = self.star.biography; if (s != nil) { s = [s stringByReplacingOccurrencesOfString:@"


" withString:@""]; s = [s stringByReplacingOccurrencesOfString:@"
" withString:@"\n"]; s = [s stringByReplacingOccurrencesOfString:@"
" withString:@"\n"]; s = [s stringByReplacingOccurrencesOfString:@"

" withString:@"\n"]; s = [s stringByReplacingOccurrencesOfString:@"

" withString:@""]; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\<[^>]*>" options:NSRegularExpressionCaseInsensitive error:nil]; s = [regex stringByReplacingMatchesInString:s options:0 range:NSMakeRange(0, [s length]) withTemplate:@""]; } NSMutableParagraphStyle *paragraphStyles = [[NSMutableParagraphStyle alloc] init]; paragraphStyles.alignment = NSTextAlignmentJustified; paragraphStyles.firstLineHeadIndent = 0.05; // Very IMP NSDictionary *attributes = @{NSParagraphStyleAttributeName: paragraphStyles}; NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:s attributes:attributes]; self.biographie.attributedText = attributedString; } [self.biographie sizeToFit]; self.biographie.frame = CGRectMake(x, y, width, self.biographie.frame.size.height); self.biographie.center = CGPointMake(self.bounds.size.width/2, self.biographie.center.y); globalY = (NSInteger) (self.biographie.frame.origin.y + self.biographie.frame.size.height); } globalY += margins; { NSInteger y = globalY; NSInteger x = 0; //center NSInteger width = 150; NSInteger height = 0; self.separateurFilmographie.frame = CGRectMake(x, y, width, height); [self.separateurFilmographie sizeToFit]; self.separateurFilmographie.frame = CGRectMake(x, y, self.separateurFilmographie.frame.size.width, self.separateurFilmographie.frame.size.height); self.separateurFilmographie.center = CGPointMake(self.frame.size.width/2, self.separateurFilmographie.center.y); globalY = (NSInteger) (self.separateurFilmographie.frame.origin.y + self.separateurFilmographie.frame.size.height); } globalY += margins; { NSInteger y = globalY; NSInteger x = 0; //center NSInteger width = (NSInteger) (self.contentView.bounds.size.width - 50); NSInteger height = 0; //auto height self.filmographieLayout.frame = CGRectMake(x, y, width, height); self.filmographieLayout.star= self.star; [self.filmographieLayout sizeToFit]; //center self.filmographieLayout.center = CGPointMake(self.frame.size.width/2, self.filmographieLayout.center.y); globalY = (NSInteger) (self.filmographieLayout.frame.origin.y + self.filmographieLayout.frame.size.height); } globalY += margins; { NSInteger y = globalY; NSInteger x = 0; //center NSInteger width = 150; NSInteger height = 0; self.separateurPhotos.frame = CGRectMake(x, y, width, height); [self.separateurPhotos sizeToFit]; self.separateurPhotos.frame = CGRectMake(x, y, self.separateurPhotos.frame.size.width, self.separateurPhotos.frame.size.height); self.separateurPhotos.center = CGPointMake(self.frame.size.width/2, self.separateurPhotos.center.y); globalY = (NSInteger) (self.separateurPhotos.frame.origin.y + self.separateurPhotos.frame.size.height); } globalY += margins; { NSInteger y = globalY; NSInteger x = 0; //center NSInteger width = (NSInteger) (self.contentView.bounds.size.width - 50); NSInteger height = 200; self.photosLayout.frame = CGRectMake(x, y, width, height); [self.photosLayout load:self.star]; //center self.photosLayout.center = CGPointMake(self.frame.size.width/2, self.photosLayout.center.y); globalY = (NSInteger) (self.photosLayout.frame.origin.y + self.photosLayout.frame.size.height); } globalY += 35; } self.scrollView.frame = self.bounds; self.contentView.frame = CGRectMake(0, 0, self.scrollView.bounds.size.width, globalY); self.scrollView.contentSize = CGSizeMake(self.contentView.frame.size.width, self.contentView.frame.size.height); self.filmographieLayout.delegate = self.delegate; self.photosLayout.delegate = self.delegate; if(self.star){ // [self vider]; } } } -(void)vider { self.contentView = nil; self.scrollView = nil; self.labelDateNaissance = nil; self.labelDateNaissanceValeur = nil; self.labelLieuNaissance = nil; self.labelLieuNaissanceValeur = nil; self.labelActivites = nil; self.labelActivitesValeur = nil; self.separateurBiographie = nil; self.biographie = nil; self.separateurFilmographie = nil; self.filmographieLayout = nil; self.separateurPhotos = nil; self.photosLayout = nil; } -(void)setFrame:(CGRect)frame { [super setFrame:frame]; [self remplir]; } -(void)loadStarFull:(PersonFull*)starFull { self.star = starFull; [self remplir]; firstRemplir = false; } @end ================================================ FILE: ociney/src/View/StarDetailDelegate.h ================================================ // // StarDetailDelegate.h // ociney // // Created by florent champigny on 02/01/2015. // Copyright (c) 2015 bdc. All rights reserved. // #ifndef ociney_StarDetailDelegate_h #define ociney_StarDetailDelegate_h @protocol StarDetailDelegate -(void)onMovieClicked:(NSInteger)index; -(void)onMoreMovieClicked; -(void)onPhotoClicked:(NSInteger)index; -(void)onMorePhotoClicked; @end #endif ================================================ FILE: ociney/src/View/StarDetailPhotos.h ================================================ // // StarDetailPhotos.h // ociney // // Created by florent champigny on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "OCStarPhoto.h" #import "PersonFull.h" #import "StarDetailDelegate.h" @interface StarDetailPhotos : UIView @property (retain,nonatomic) OCStarPhoto *layoutImage1; @property (retain,nonatomic) OCStarPhoto *layoutImage2; @property (retain,nonatomic) OCStarPhoto *layoutImage3; @property (retain,nonatomic) OCStarPhoto *layoutImage4; -(void)load:(PersonFull*)personFull; @property (strong,nonatomic) id delegate; @end ================================================ FILE: ociney/src/View/StarDetailPhotos.m ================================================ // // StarDetailPhotos.m // ociney // // Created by florent champigny on 22/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "StarDetailPhotos.h" @implementation StarDetailPhotos -(id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; [self creer]; return self; } -(void)setFrame:(CGRect)frame { [super setFrame:frame]; [self remplir]; } -(void)creer { self.layoutImage1 = [[OCStarPhoto alloc] initWithFrame:CGRectZero]; self.layoutImage2 = [[OCStarPhoto alloc] initWithFrame:CGRectZero]; self.layoutImage3 = [[OCStarPhoto alloc] initWithFrame:CGRectZero]; self.layoutImage4 = [[OCStarPhoto alloc] initWithFrame:CGRectZero]; [self addSubview:self.layoutImage1]; [self addSubview:self.layoutImage2]; [self addSubview:self.layoutImage3]; [self addSubview:self.layoutImage4]; self.layoutImage4.image.image = [UIImage imageNamed:@"plus_black"]; self.layoutImage4.background.image = [UIImage imageNamed:@"plus_dashed_photos_black"]; self.layoutImage4.background.alpha = 0.2; self.layoutImage4.image.alpha = 0.2; self.layoutImage4.glass.hidden = YES; [self.layoutImage1 ajouterOmbre]; [self.layoutImage2 ajouterOmbre]; [self.layoutImage3 ajouterOmbre]; } -(void)remplir { NSInteger width = (NSInteger) self.bounds.size.width; NSInteger height = (NSInteger) self.bounds.size.height; NSInteger p = 3; self.layoutImage1.padding = p; self.layoutImage2.padding = p; self.layoutImage3.padding = p; self.layoutImage4.padding = p; self.layoutImage1.frame = CGRectMake(0, 0, width/3, height); self.layoutImage2.frame = CGRectMake(width/3, 0, width*2/3, height/2); self.layoutImage3.frame = CGRectMake(width/3, height/2, width/3, height/2); self.layoutImage4.frame = CGRectMake(width*2/3, height/2, width/3, height/2); self.layoutImage4.image.frame = CGRectMake(0, 0, self.layoutImage4.bounds.size.width/3, self.layoutImage4.bounds.size.height/3); self.layoutImage4.image.center = CGPointMake(self.layoutImage4.bounds.size.width/2+3, self.layoutImage4.bounds.size.height/2+1); self.layoutImage1.userInteractionEnabled = YES; self.layoutImage2.userInteractionEnabled = YES; self.layoutImage3.userInteractionEnabled = YES; self.layoutImage4.userInteractionEnabled = YES; [self.layoutImage1 addGestureRecognizer: [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap1)] ]; [self.layoutImage2 addGestureRecognizer: [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap2)] ]; [self.layoutImage3 addGestureRecognizer: [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap3)] ]; [self.layoutImage4 addGestureRecognizer: [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapMore)] ]; } -(void)vider { self.layoutImage1 = nil; self.layoutImage2 = nil; self.layoutImage3 = nil; self.layoutImage4 = nil; } -(void)load:(PersonFull*)personFull { NSArray *medias = personFull.media; if(medias.count > 0){ Media *m1 = [personFull.media objectAtIndex:0]; [self.layoutImage1 loadImageUrl:m1.thumbnail.href]; if(medias.count > 1){ Media *m2 = [personFull.media objectAtIndex:1]; [self.layoutImage2 loadImageUrl:m2.thumbnail.href]; if(medias.count > 2){ Media *m3 = [personFull.media objectAtIndex:2]; [self.layoutImage3 loadImageUrl:m3.thumbnail.href]; } } } [self vider]; } -(void)tap1 { [self.delegate onPhotoClicked:1]; } -(void)tap2 { [self.delegate onPhotoClicked:2]; } -(void)tap3 { [self.delegate onPhotoClicked:3]; } -(void)tapMore { [self.delegate onMorePhotoClicked]; } @end ================================================ FILE: ociney/src/View/TheaterDetailMovieBackground.h ================================================ // // TheaterDetailMovieBackground.h // ociney // // Created by florent champigny on 30/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "Movie.h" #import "OCMovieDelegates.h" @interface TheaterDetailMovieBackground : UIView @property (strong,nonatomic) UIImageView* ecran; @property (strong,nonatomic) UIImageView* rideauBasGauche; @property (strong,nonatomic) UIImageView* rideauBasDroite; @property (strong,nonatomic) UIImageView* rideauHautGauche; @property (strong,nonatomic) UIImageView* rideauHautDroite; @property (strong,nonatomic) UIImageView* sieges; @property (strong,nonatomic) Movie* movie; @property (strong,nonatomic) id delegate; -(void)loadMovie:(Movie *)movie; -(void)animerOuverture; @end ================================================ FILE: ociney/src/View/TheaterDetailMovieBackground.m ================================================ // // TheaterDetailMovieBackground.m // ociney // // Created by florent champigny on 30/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "TheaterDetailMovieBackground.h" #import "Color+Hex.h" #import "Media.h" #import "UIImageView+WebCache.m" @implementation TheaterDetailMovieBackground { BOOL first; Media* bandeAnnonce; UITapGestureRecognizer* tap; } -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:frame]) { first = YES; } return self; } - (void)layoutSubviews { if(first){ first = NO; [self creer]; } } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; [self remplir]; } -(void)loadMovie:(Movie *)movie { self.movie = movie; bandeAnnonce = self.movie.bandesAnnonces[0]; if(bandeAnnonce != nil){ [self.ecran sd_setImageWithURL:[NSURL URLWithString:bandeAnnonce.thumbnail.href]]; tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onBandeAnnonceClicked)]; [self.ecran addGestureRecognizer:tap]; } } -(void)creer { bandeAnnonce = self.movie.bandesAnnonces[0]; self.userInteractionEnabled = YES; self.ecran = [[UIImageView alloc] initWithFrame:CGRectZero]; self.ecran.backgroundColor = [UIColor colorFromHexString:@"#c1c1c1"]; self.ecran.alpha = 0.3; self.ecran.userInteractionEnabled = YES; self.rideauBasGauche = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"curtain_sub_left"]]; self.rideauBasDroite = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"curtain_sub_right"]]; self.rideauHautGauche = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"curtain_left"]]; self.rideauHautDroite = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"curtain_right"]]; self.sieges = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"seats"]]; self.ecran.contentMode = UIViewContentModeScaleAspectFill; self.rideauBasGauche.contentMode = UIViewContentModeScaleAspectFill; self.rideauBasDroite.contentMode = UIViewContentModeScaleAspectFill; self.rideauHautGauche.contentMode = UIViewContentModeScaleAspectFill; self.rideauHautDroite.contentMode = UIViewContentModeScaleAspectFill; self.sieges.contentMode = UIViewContentModeScaleAspectFill; self.ecran.clipsToBounds = YES; self.rideauBasGauche.clipsToBounds = YES; self.rideauBasDroite.clipsToBounds = YES; self.rideauHautGauche.clipsToBounds = YES; self.rideauHautDroite.clipsToBounds = YES; self.sieges.clipsToBounds = YES; if(bandeAnnonce != nil) [self.ecran sd_setImageWithURL:[NSURL URLWithString:bandeAnnonce.thumbnail.href]]; [self addSubview:self.ecran]; [self addSubview:self.rideauBasGauche]; [self addSubview:self.rideauBasDroite]; [self addSubview:self.rideauHautGauche]; [self addSubview:self.rideauHautDroite]; [self addSubview:self.sieges]; } -(void)remplir { { int margin = 15; NSInteger x = 0; NSInteger y = margin; NSInteger width = self.bounds.size.width - margin*2; NSInteger height = 160; self.ecran.frame = CGRectMake(x, y, width, height); self.ecran.center = CGPointMake(self.bounds.size.width/2, self.ecran.center.y); } { //rideaux NSInteger rideauHauteur = self.ecran.frame.size.height + self.ecran.frame.origin.x*3; { NSInteger rideauLargeur = self.bounds.size.width/2; { NSInteger x = 0; NSInteger y = 0; NSInteger width = rideauLargeur; NSInteger height = rideauHauteur; self.rideauBasGauche.frame = CGRectMake(x, y, width, height); } { NSInteger y = 0; NSInteger width = rideauLargeur; NSInteger height = rideauHauteur; NSInteger x = self.bounds.size.width - width; self.rideauBasDroite.frame = CGRectMake(x, y, width, height); } } { NSInteger rideauLargeur = self.bounds.size.width/3; { NSInteger x = 0; NSInteger y = 0; NSInteger width = rideauLargeur; NSInteger height = rideauHauteur; self.rideauHautGauche.frame = CGRectMake(x, y, width, height); } { NSInteger y = 0; NSInteger width = rideauLargeur; NSInteger height = rideauHauteur; NSInteger x = self.bounds.size.width - width; self.rideauHautDroite.frame = CGRectMake(x, y, width, height); } } } { //sièges NSInteger x = 0; NSInteger y = self.ecran.frame.origin.y + self.ecran.frame.size.height + 20; NSInteger width = self.bounds.size.width; NSInteger height = 100; self.sieges.frame = CGRectMake(x, y, width, height); } } -(void)animerOuverture { [UIView animateWithDuration:2 delay:0.8 options:UIViewAnimationOptionCurveEaseOut animations:^{ self.rideauBasGauche.transform = CGAffineTransformMakeTranslation(-1*self.rideauBasGauche.frame.size.width, 0); self.rideauBasDroite.transform = CGAffineTransformMakeTranslation(self.rideauBasDroite.frame.size.width, 0); } completion:^(BOOL finished) { }]; } -(void)onBandeAnnonceClicked { [self.delegate onBandeAnnonceClicked:bandeAnnonce]; } @end ================================================ FILE: ociney/src/View/TheaterDetailMovieForeground.h ================================================ // // TheaterDetailMovieForeground.h // ociney // // Created by florent champigny on 30/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "SwipeView.h" #import "TheaterDetailMoviePageHoraires.h" #import "HeaderMovieDetail.h" #import "Movie.h" #import "Theater.h" @interface TheaterDetailMovieForeground : UIView @property HeaderMovieDetail *header; @property SwipeView* swipeView; @property UIView* backgroundView; @property Movie* movie; @property Theater* theater; @end ================================================ FILE: ociney/src/View/TheaterDetailMovieForeground.m ================================================ // // TheaterDetailMovieForeground.m // ociney // // Created by florent champigny on 30/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "TheaterDetailMovieForeground.h" @implementation TheaterDetailMovieForeground { BOOL first; } -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:frame]) { first = YES; } return self; } - (void)layoutSubviews { if(first){ first = NO; [self creer]; } } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; [self remplir]; } -(void)creer { self.backgroundColor = [UIColor clearColor]; [self addSubview:self.backgroundView = [UIView new]]; self.backgroundView.backgroundColor = [UIColor blackColor]; [self addSubview:(self.swipeView = [[SwipeView alloc] initWithFrame:self.bounds])]; self.swipeView.pagingEnabled = YES; self.swipeView.dataSource = self; self.swipeView.delegate = self; self.swipeView.backgroundColor = [UIColor clearColor]; [self addSubview:(self.header = [[HeaderMovieDetail alloc] initWithFrame:CGRectZero])]; self.header.backgroundColor = [UIColor clearColor]; self.header.loader.hidden = NO; [self.header.loader animer]; } -(void)remplir { self.header.frame = CGRectMake(self.bounds.origin.x, self.bounds.origin.y, self.bounds.size.width, MOVIE_HEADER_HEIGHT); [self.header chargerAvecMovie:self.movie]; { NSInteger y = self.header.frame.origin.y + self.header.frame.size.height + 15; NSInteger height = self.bounds.size.height - y; self.swipeView.frame = CGRectMake(self.bounds.origin.x, y, self.bounds.size.width, height); [self.swipeView reloadData]; } { NSInteger y = self.header.frame.origin.y + self.header.frame.size.height; NSInteger height = self.bounds.size.height - y; self.backgroundView.frame = CGRectMake(self.bounds.origin.x, y, self.bounds.size.width, height); } } #pragma mark - SwipeViewDataSource - (NSInteger)numberOfItemsInSwipeView:(SwipeView *)swipeView { return self.theater.horairesSemaineJours.count; } - (UIView *)swipeView:(SwipeView *)swipeView viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view { if(view == nil){ view = [[TheaterDetailMoviePageHoraires alloc] initWithFrame:self.swipeView.bounds]; view.backgroundColor = [UIColor clearColor]; view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; } TheaterDetailMoviePageHoraires *v = (TheaterDetailMoviePageHoraires*)view; NSString *jour = self.theater.horairesSemaineJours[index]; NSArray *horaires = self.theater.horairesSemaine[jour]; [v loadJour:jour andHoraires:horaires]; return view; } #pragma mark - SwipeViewDelegate - (CGSize)swipeViewItemSize:(SwipeView *)swipeView { return self.swipeView.bounds.size; } @end ================================================ FILE: ociney/src/View/TheaterDetailMoviePageHoraires.h ================================================ // // TheaterDetailMoviePageHoraires.h // ociney // // Created by florent champigny on 30/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import @interface TheaterDetailMoviePageHoraires : UIView @property (strong,nonatomic) UILabel *dateLabel; @property (strong,nonatomic) UIImageView *prevDate; @property (strong,nonatomic) UIImageView *nextDate; @property (strong,nonatomic) UIView *divier; @property (strong,nonatomic) UIView *horaires; @property (strong,nonatomic) NSString* jour; @property (strong,nonatomic) NSArray* arrayHoraires; -(void)loadJour:(NSString*)jour andHoraires:(NSArray*)horaires; @end ================================================ FILE: ociney/src/View/TheaterDetailMoviePageHoraires.m ================================================ // // TheaterDetailMoviePageHoraires.m // ociney // // Created by florent champigny on 30/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "TheaterDetailMoviePageHoraires.h" #import "Color+Hex.h" #import "Constantes.h" #import "CellTheaterHoraires.h" @implementation TheaterDetailMoviePageHoraires { BOOL first; } -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:frame]) { first = YES; } return self; } - (void)layoutSubviews { if(first){ first = NO; [self creer]; } } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; [self remplir]; } -(void)creer { [self addSubview:(self.dateLabel = [UILabel new])]; [self addSubview:(self.prevDate = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ic_prev"]])]; [self addSubview:(self.nextDate = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ic_next"]])]; [self addSubview:(self.divier = [UIView new])]; self.dateLabel.textColor = [UIColor colorFromHexString:@"#37474f"]; self.dateLabel.font = [UIFont fontWithName:LIGHT size:20]; self.divier.backgroundColor = [UIColor colorFromHexString:WHITE30]; self.prevDate.alpha = 0.3; self.nextDate.alpha = 0.3; self.prevDate.contentMode = UIViewContentModeScaleAspectFit; self.nextDate.contentMode = UIViewContentModeScaleAspectFit; self.horaires.backgroundColor = [UIColor clearColor]; [self addSubview:(self.horaires = [UIView new])]; } -(void)remplir { { self.dateLabel.text = self.jour; NSInteger x = 0; NSInteger y = 0; self.dateLabel.text = [self.dateLabel.text uppercaseString]; [self.dateLabel sizeToFit]; self.dateLabel.frame = CGRectMake(x, y, self.dateLabel.frame.size.width, self.dateLabel.frame.size.height); self.dateLabel.center = CGPointMake(self.bounds.size.width/2, self.dateLabel.center.y); } { NSInteger x = self.dateLabel.frame.origin.x - 25; NSInteger y = 0; NSInteger width = 20; NSInteger height = 20; self.prevDate.frame = CGRectMake(x, y, width, height); self.prevDate.center = CGPointMake(self.prevDate.center.x, self.dateLabel.center.y); } { NSInteger x = self.dateLabel.frame.origin.x + self.dateLabel.frame.size.width + 10; NSInteger y = 0; NSInteger width = 20; NSInteger height = 20; self.nextDate.frame = CGRectMake(x, y, width, height); self.nextDate.center = CGPointMake(self.nextDate.center.x, self.dateLabel.center.y); } { NSInteger marginTop = 10; NSInteger x = 0; NSInteger y = self.dateLabel.frame.origin.y + self.dateLabel.frame.size.height + marginTop; NSInteger width = 240; NSInteger height = 1; self.divier.frame = CGRectMake(x, y, width, height); self.divier.center = CGPointMake(self.bounds.size.width/2, self.divier.center.y); } { NSInteger marginTop = 10; NSInteger x = 0; NSInteger y = self.divier.frame.origin.y + self.divier.frame.size.height + marginTop; NSInteger width = 200; NSInteger height = self.bounds.size.height - y; self.horaires.frame = CGRectMake(x, y, width, height); self.horaires.center = CGPointMake(self.bounds.size.width/2, self.horaires.center.y); for (UIView *v in self.horaires.subviews) { [v removeFromSuperview]; } NSInteger globalY = 0; for(int i =0;i #import "SwipeView.h" @interface ViewPager : UIView @property (strong, nonatomic) SwipeView *swipeView; -(void)reloadData; @end ================================================ FILE: ociney/src/View/ViewPager.m ================================================ // // ViewPager.m // ociney // // Created by florent champigny on 24/12/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "ViewPager.h" @implementation ViewPager { BOOL first; } -(id)initWithFrame:(CGRect)frame { if(self = [super initWithFrame:frame]) { first = YES; } return self; } -(void)reloadData { [self.swipeView reloadData]; } - (void)layoutSubviews { if(first) { [self creer]; first = NO; } } -(void)setFrame:(CGRect)frame { [super setFrame:frame]; [self.swipeView setBounds:self.bounds]; } -(void)creer{ self.swipeView = [[SwipeView alloc] initWithFrame:self.bounds]; [self addSubview:self.swipeView]; self.swipeView.dataSource = self; self.swipeView.delegate = self; self.swipeView.backgroundColor = [UIColor blackColor]; // self.swipeView.bounces = NO; // self.swipeView.vertical = NO; self.swipeView.pagingEnabled = YES; // self.swipeView.itemsPerPage = 1; // self.swipeView.scrollEnabled = YES; // self.swipeView.wrapEnabled = YES; } - (CGSize)swipeViewItemSize:(SwipeView *)swipeView { return self.swipeView.bounds.size; } -(NSInteger)numberOfItemsInSwipeView:(SwipeView *)swipeView { return 0; } @end ================================================ FILE: ociney/src/View/cell/OCMovieCell.h ================================================ // // OCMovieCell.h // ociney // // Created by Kevin De Jesus Ferreira on 24/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "EDStarRating.h" #import "Movie.h" #import "OCLoader.h" #import "OCAppDelegate.h" #define MOVIE_CELL_HEIGHT 140 @class OCMovieCell; @protocol OCMovieCellDelegate -(void)onClick:(OCMovieCell*)cell movie:(Movie *)movie; @end @interface OCMovieCell : UITableViewCell @property (strong,nonatomic) id delegate; @property (strong,nonatomic) UIView * content; @property (strong,nonatomic) UIView * bottomView; @property (strong,nonatomic) UIView * jaquette; @property (strong,nonatomic) UIView * fondJaquette; @property (strong,nonatomic) UIView * gradientView; @property (strong,nonatomic) UIView * gradientViewBlack85; @property (strong,nonatomic) UIView * viewClick; @property (strong,nonatomic) OCAppDelegate * appDelegate; @property (strong,nonatomic) CAGradientLayer * gradient; @property (strong,nonatomic) CAGradientLayer * gradient85; @property (strong,nonatomic) CAGradientLayer * gradientFondJaquette; @property (strong,nonatomic) UIImageView * parallaxImage; @property (strong,nonatomic) UIImageView * imageJaquette; @property (strong,nonatomic) OCLoader * rouletteFilm; @property (strong,nonatomic) UILabel * titreFilm; @property (strong,nonatomic) UILabel * enSalle; @property (strong,nonatomic) UILabel * styleFilm; @property (strong,nonatomic) UILabel * heureFilm; @property (strong,nonatomic) UILabel * note; @property (strong,nonatomic) EDStarRating * starRating; @property (strong,nonatomic) Movie * movie; -(void)chargerAvecMovie:(Movie *)movie anDelegate:(id)delegate; -(void)cellOnTableView:(UITableView *)tableView didScrollOnView:(UIView *)view; -(void)animer; @end ================================================ FILE: ociney/src/View/cell/OCMovieCell.m ================================================ // // OCMovieCell.m // ociney // // Created by Kevin De Jesus Ferreira on 24/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCMovieCell.h" #import "UIImageView+WebCache.h" #import "Color+Hex.h" @implementation OCMovieCell{ BOOL first; } - (void)awakeFromNib { [super layoutSubviews]; self.content = [UIView new]; first = YES; { self.gradientView = [UIView new]; [self.content addSubview:self.gradientView]; self.gradient = [CAGradientLayer layer]; self.gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorFromHexString:@"#c8c8c8ff"] CGColor], (id)[[UIColor colorFromHexString:@"#aaaaaaff"] CGColor], nil]; [self.gradientView.layer insertSublayer:self.gradient atIndex:0]; } { self.parallaxImage = [UIImageView new]; [self.content addSubview:self.parallaxImage]; } { self.gradientViewBlack85 = [UIView new]; [self.content addSubview:self.gradientViewBlack85]; self.gradient85 = [CAGradientLayer layer]; self.gradient85.colors = [NSArray arrayWithObjects:(id)[[UIColor clearColor] CGColor], (id)[[UIColor colorFromHexString:@"#000000d9"] CGColor], nil]; [self.gradientViewBlack85.layer insertSublayer:self.gradient85 atIndex:0]; } { self.bottomView = [UIView new]; [self.bottomView setBackgroundColor:[UIColor whiteColor]]; [self.content addSubview:self.bottomView]; } { self.note = [UILabel new]; self.note.textAlignment = NSTextAlignmentLeft; [self.note setTextColor:[UIColor whiteColor]]; self.note.font = [UIFont fontWithName:REGULAR size:11]; [self.content addSubview:self.note]; } { self.titreFilm = [UILabel new]; self.titreFilm.textAlignment = NSTextAlignmentLeft; [self.titreFilm setTextColor:[UIColor whiteColor]]; self.titreFilm.font = [UIFont fontWithName:REGULAR size:16]; [self.content addSubview:self.titreFilm]; } { self.styleFilm = [UILabel new]; self.styleFilm.textAlignment = NSTextAlignmentLeft; [self.styleFilm setTextColor:[UIColor whiteColor]]; self.styleFilm.font = [UIFont fontWithName:LIGHT_ITALIC size:11]; [self.content addSubview:self.styleFilm]; } { self.heureFilm = [UILabel new]; self.heureFilm.textAlignment = NSTextAlignmentLeft; [self.heureFilm setTextColor:[UIColor grayColor]]; self.heureFilm.font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:9]; [self.bottomView addSubview:self.heureFilm]; } { self.jaquette = [UIView new]; [self.jaquette setBackgroundColor:[UIColor whiteColor]]; [self.content addSubview:self.jaquette]; } { self.fondJaquette = [UIView new]; self.gradientFondJaquette = [CAGradientLayer layer]; self.gradientFondJaquette.colors = [NSArray arrayWithObjects:(id)[[UIColor colorFromHexString:@"#c8c8c8ff"] CGColor], (id)[[UIColor colorFromHexString:@"#aaaaaaff"] CGColor], nil]; [self.fondJaquette.layer insertSublayer:self.gradientFondJaquette atIndex:0]; [self.jaquette addSubview:self.fondJaquette]; } { self.rouletteFilm = [OCLoader loader]; [self.fondJaquette addSubview:self.rouletteFilm]; } { self.imageJaquette = [UIImageView new]; [self.jaquette addSubview:self.imageJaquette]; } { self.starRating = [EDStarRating new]; [self.starRating setBackgroundColor:[UIColor clearColor]]; self.starRating.starImage = [UIImage imageNamed:@"star_off_small.png"]; self.starRating.starHighlightedImage = [UIImage imageNamed:@"star_on_small.png"]; self.starRating.maxRating = 5.0; //self.starRating.delegate = self; self.starRating.horizontalMargin = 5; self.starRating.editable=NO; self.starRating.displayMode=EDStarRatingDisplayAccurate; [self.content addSubview:self.starRating]; } { self.enSalle = [UILabel new]; self.enSalle.textAlignment = NSTextAlignmentLeft; [self.enSalle setTextColor:[UIColor colorFromHexString:WHITE90]]; self.enSalle.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:12]; [self.content addSubview:self.enSalle]; } { self.viewClick = [UIView new]; [self.viewClick setBackgroundColor:[UIColor clearColor]]; [self.viewClick addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onClick:)]]; [self.content addSubview:self.viewClick]; } [self.contentView addSubview:self.content]; } //améliore grandement la performance, ne positionne qu'une fois ! -(void)positionner { if(first){ self.content.frame = CGRectMake(0,0,self.contentView.frame.size.width,MOVIE_CELL_HEIGHT); self.gradientView.frame = CGRectMake(0.0f, 0.0f, self.content.frame.size.width,self.content.frame.size.height); self.gradient.frame = self.gradientView.bounds; self.gradientViewBlack85.frame = CGRectMake(0.0f, 0.0f, self.content.frame.size.width,self.content.frame.size.height); self.gradient85.frame = self.gradientViewBlack85.bounds; self.parallaxImage.frame = CGRectMake(0,0,self.contentView.frame.size.width,201); self.content.clipsToBounds = YES; self.contentView.clipsToBounds = YES; self.parallaxImage.clipsToBounds = YES; self.parallaxImage.alpha = 0.6f; self.bottomView.frame = CGRectMake(0,self.content.frame.size.height-18,self.contentView.frame.size.width,18); self.jaquette.frame = CGRectMake(10,15,85,self.content.frame.size.height-20); CALayer *layer = self.jaquette.layer; layer.shadowOffset = CGSizeMake(2, 2); layer.shadowColor = [[UIColor blackColor] CGColor]; layer.cornerRadius = 0.2f; layer.shadowRadius = 3.0f; layer.shadowOpacity = 0.80f; layer.shadowPath = [[UIBezierPath bezierPathWithRect:layer.bounds] CGPath]; int marginTop = 2; int marginLeft = 2; self.imageJaquette.frame = CGRectMake(0,0,self.jaquette.frame.size.width - marginLeft*2,self.jaquette.frame.size.height - marginTop*2); self.imageJaquette.center = CGPointMake(self.jaquette.frame.size.width/2, self.jaquette.frame.size.height/2); { self.fondJaquette.frame = self.imageJaquette.bounds; self.fondJaquette.center = self.imageJaquette.center; self.gradientFondJaquette.frame = self.fondJaquette.bounds; self.rouletteFilm.frame = CGRectMake(0, 0, 40, 40); self.rouletteFilm.center = self.fondJaquette.center; } self.starRating.frame = CGRectMake(100+self.jaquette.frame.origin.x + self.jaquette.frame.size.width +10 - 124,25, self.content.frame.size.width, 50); { int elementsX = self.jaquette.frame.origin.x + self.jaquette.frame.size.width+ 7; int elementY = self.content.frame.size.height - self.bottomView.frame.size.height - 5; int elementWidth = self.contentView.frame.size.width - elementsX - 5; { self.styleFilm.text = @" "; [self.styleFilm sizeToFit]; int y = elementY - self.styleFilm.frame.size.height; self.styleFilm.frame = CGRectMake(elementsX,y,elementWidth,self.styleFilm.frame.size.height); elementY -= self.styleFilm.frame.size.height + 3; } { self.titreFilm.text = @" "; [self.titreFilm sizeToFit]; int y = elementY - self.titreFilm.frame.size.height; self.titreFilm.frame = CGRectMake(elementsX,y,elementWidth,self.titreFilm.frame.size.height); elementY -= self.titreFilm.frame.size.height + 3; self.titreFilm.adjustsFontSizeToFitWidth = NO; self.titreFilm.lineBreakMode = NSLineBreakByTruncatingTail; } { int width = 125; int height = 20; int y = elementY - height; self.starRating.frame = CGRectMake(elementsX - 5 ,y, width, height); elementY -= height; self.note.frame = CGRectMake(self.starRating.frame.origin.x + self.starRating.frame.size.width + 5,y, self.content.frame.size.width, height); } self.enSalle.frame = CGRectMake(elementsX,elementY - 8,self.content.frame.size.width,40); self.heureFilm.text = @" "; [self.heureFilm sizeToFit]; self.heureFilm.frame = CGRectMake(elementsX,0,self.contentView.frame.size.width,self.heureFilm.frame.size.height); self.heureFilm.center = CGPointMake(self.heureFilm.center.x, self.bottomView.frame.size.height/2); } self.viewClick.frame = CGRectMake(0, 0, self.content.frame.size.width, self.content.frame.size.height); } first = NO; } -(void)chargerAvecMovie:(Movie *)movie anDelegate:(id)delegate{ self.movie = movie; self.delegate = delegate; [self positionner]; [self remplir]; } -(void) remplir{ if(self.movie != nil){ if(self.movie.title != nil) [self.titreFilm setText:self.movie.title]; else [self.titreFilm setText:self.movie.originalTitle]; self.starRating.rating= (self.movie.statistics.userRating + self.movie.statistics.pressRating)/2; NSString * duree = [self.movie getDuree]; if([duree isEqualToString:@"0h00min"]) [self.heureFilm setText:@""]; else [self.heureFilm setText:duree]; [self.styleFilm setText:[self.movie getGenres]]; [self.imageJaquette sd_setImageWithURL:[NSURL URLWithString:self.movie.poster.href]]; [self.parallaxImage sd_setImageWithURL:[NSURL URLWithString:self.movie.defaultMedia.media.thumbnail.href]]; self.enSalle.hidden = YES; { if(self.starRating.rating == 0){ self.starRating.hidden = YES; [self.note setText:@""]; if (self.movie._release != nil) { @try { NSString * date = [self.movie._release getReleaseDate]; int annee = (int)[[[date componentsSeparatedByString: @"/"] objectAtIndex:2] integerValue]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy"]; int anneeEncours = (int)[[formatter stringFromDate:[NSDate date]] integerValue]; if (annee >= anneeEncours) { self.enSalle.hidden = NO; [self.enSalle setText:[NSString stringWithFormat:@"En salle le %@",[self.movie._release getReleaseDate]]]; } }@catch (NSException * e) { NSLog(@"Exception: %@", e); } } }else{ [self.note setText:[NSString stringWithFormat:@"(%.01f)",self.starRating.rating]]; } } } } -(void)onClick:(id)sender{ [self.delegate onClick:self movie:self.movie]; } -(void)animer { [self.rouletteFilm animer]; self.titreFilm.alpha = 0; self.styleFilm.alpha = 0; self.note.alpha = 0; self.heureFilm.alpha = 0; self.starRating.alpha = 0; self.jaquette.frame = CGRectMake(-90,self.jaquette.frame.origin.y,self.jaquette.frame.size.width,self.jaquette.frame.size.height); [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveLinear animations:^(void) { self.jaquette.frame = CGRectMake(10,self.jaquette.frame.origin.y,self.jaquette.frame.size.width,self.jaquette.frame.size.height); } completion:^(BOOL finished) {} ]; [UIView animateWithDuration:0.5 delay:0.5 options:UIViewAnimationOptionCurveLinear animations:^(void) { self.titreFilm.alpha = 1; self.styleFilm.alpha = 1; self.heureFilm.alpha = 1; self.note.alpha = 1; self.starRating.alpha = 1; } completion:^(BOOL finished) {} ]; } - (void)cellOnTableView:(UITableView *)tableView didScrollOnView:(UIView *)view { CGRect rectInSuperview = [tableView convertRect:self.frame toView:view]; float distanceFromCenter = CGRectGetHeight(view.frame)/2 - CGRectGetMinY(rectInSuperview); float difference = CGRectGetHeight(self.parallaxImage.frame) - CGRectGetHeight(self.frame); float move = (distanceFromCenter / CGRectGetHeight(view.frame)) * difference; CGRect imageRect = self.parallaxImage.frame; imageRect.origin.y = -(difference/2)+move; self.parallaxImage.frame = imageRect; } @end ================================================ FILE: ociney/src/View/cell/OCMovieCell.xib ================================================ ================================================ FILE: ociney/src/View/cell/OCStarCell.h ================================================ // // OCStarCell.h // ociney // // Created by Kevin De Jesus Ferreira on 29/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #import "PersonFull.h" #define STAR_CELL_HEIGHT 70 @interface OCStarCell : UITableViewCell @property (strong,nonatomic) UIView * content; @property (strong,nonatomic) UIView * relative_image_fond; @property (strong,nonatomic) UIView * gradient_placeholder_view; @property (strong,nonatomic) UIView * gradient_transparent_white_0deg_view; @property (strong,nonatomic) UIView * layoutRight; @property (strong,nonatomic) UIView * profilUser; @property (strong,nonatomic) UIView * nomPrenom; @property (strong,nonatomic) UIView * gradient_transparent_black_view; @property (strong,nonatomic) CAGradientLayer * gradient_placeholder; @property (strong,nonatomic) CAGradientLayer * gradient_transparent_white_0deg; @property (strong,nonatomic) CAGradientLayer * gradient_transparent_black; @property (strong,nonatomic) UIImageView * imageFond; @property (strong,nonatomic) UIImageView * ic_topstar; @property (strong,nonatomic) UIImageView * couronne; @property (strong,nonatomic) UILabel * nameStar; @property (strong,nonatomic) UILabel * role; @property (strong,nonatomic) PersonFull * person; -(void)chargerAvecStar:(PersonFull *)person; @end ================================================ FILE: ociney/src/View/cell/OCStarCell.m ================================================ // // OCStarCell.m // ociney // // Created by Kevin De Jesus Ferreira on 29/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "OCStarCell.h" #import "UIImageView+WebCache.h" #import "Color+Hex.h" @implementation OCStarCell { BOOL first; } - (void)awakeFromNib { [super layoutSubviews]; first = YES; self.content = [UIView new]; { self.couronne = [UIImageView new]; self.couronne.image = [UIImage imageNamed:@"ic_cropped_crown.png"]; self.couronne.alpha = 0.05; self.couronne.contentMode = UIViewContentModeScaleAspectFit; [self.content addSubview:self.couronne]; self.relative_image_fond = [UIView new]; { self.gradient_placeholder_view = [[UIView alloc]initWithFrame:CGRectZero]; [self.relative_image_fond addSubview:self.gradient_placeholder_view]; self.gradient_placeholder = [CAGradientLayer layer]; self.gradient_placeholder.colors = [NSArray arrayWithObjects:(id)[[UIColor colorFromHexString:@"#c8c8c8ff"] CGColor], (id)[[UIColor colorFromHexString:@"#aaaaaaff"] CGColor], nil]; [self.gradient_placeholder_view.layer insertSublayer:self.gradient_placeholder atIndex:0]; self.imageFond = [[UIImageView alloc]initWithFrame:CGRectZero]; self.imageFond.image = [UIImage imageNamed:@"ic_placeholder_people.png"]; [self.relative_image_fond addSubview:self.imageFond]; self.gradient_transparent_white_0deg_view = [[UIView alloc]initWithFrame:CGRectZero]; [self.relative_image_fond addSubview:self.gradient_transparent_white_0deg_view]; self.gradient_transparent_white_0deg = [CAGradientLayer layer]; // Hoizontal - commenting these two lines will make the gradient veritcal self.gradient_transparent_white_0deg.startPoint = CGPointMake(0.0, 0.5); self.gradient_transparent_white_0deg.endPoint = CGPointMake(1.0, 0.5); self.gradient_transparent_white_0deg.colors = [NSArray arrayWithObjects:(id)[[UIColor clearColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil]; [self.gradient_transparent_white_0deg_view.layer insertSublayer:self.gradient_transparent_white_0deg atIndex:0]; } [self.content addSubview:self.relative_image_fond]; self.layoutRight = [UIView new]; { self.profilUser = [UIView new]; { self.nomPrenom = [UIView new]; [self.profilUser addSubview:self.nomPrenom]; self.nameStar = [UILabel new]; self.nameStar.font = [UIFont fontWithName:REGULAR size:16]; [self.nameStar setTextColor:[UIColor colorFromHexString:BLACK80]]; [self.profilUser addSubview:self.nameStar]; self.role = [UILabel new]; self.role.font = [UIFont fontWithName:LIGHT_ITALIC size:12]; [self.role setTextColor:[UIColor colorFromHexString:BLACK50]]; [self.profilUser addSubview:self.role]; self.ic_topstar = [UIImageView new]; self.ic_topstar.image = [UIImage imageNamed:@"ic_topstar_1.png"]; self.ic_topstar.alpha = 0.5f; [self.profilUser addSubview:self.ic_topstar]; } [self.layoutRight addSubview:self.profilUser]; } [self.content addSubview:self.layoutRight]; } self.gradient_transparent_black_view = [UIView new]; self.gradient_transparent_black_view.alpha = 0.075; self.gradient_transparent_black = [CAGradientLayer layer]; self.gradient_transparent_black.colors = [NSArray arrayWithObjects:(id)[[UIColor clearColor] CGColor], (id)[[UIColor blackColor] CGColor], nil]; [self.gradient_transparent_black_view.layer insertSublayer:self.gradient_transparent_black atIndex:0]; [self.content addSubview:self.gradient_transparent_black_view]; [self.contentView addSubview:self.content]; } -(void)chargerAvecStar:(PersonFull *)person{ self.person = person; [self positionner]; [self remplir]; } -(void)positionner { if(first){ self.content.frame = CGRectMake(0,0,self.contentView.frame.size.width,STAR_CELL_HEIGHT); self.content.clipsToBounds = YES; /* self.content.layer.shadowRadius = 5.0f; self.content.layer.shadowOffset = CGSizeMake(1,0); self.content.layer.shadowColor = [UIColor blackColor].CGColor; self.content.layer.shadowOpacity = .9f; */ [self.content setBackgroundColor:[UIColor whiteColor]]; // Partie de gauche self.relative_image_fond.frame = CGRectMake(0,0,100,self.content.frame.size.height); self.gradient_placeholder_view.frame = self.relative_image_fond.bounds; self.gradient_placeholder.frame = self.gradient_placeholder_view.bounds; self.imageFond.frame = self.relative_image_fond.bounds; self.imageFond.contentMode = UIViewContentModeScaleAspectFill; self.gradient_transparent_white_0deg_view.frame = self.relative_image_fond.bounds; self.gradient_transparent_white_0deg.frame = self.gradient_transparent_white_0deg_view.bounds; self.layoutRight.frame = CGRectMake(self.relative_image_fond.frame.size.width,0,self.content.frame.size.width - self.relative_image_fond.frame.size.width,self.content.frame.size.height); self.profilUser.frame = CGRectMake(0,0,self.layoutRight.frame.size.width - 20,50); self.profilUser.center = CGPointMake(self.layoutRight.frame.size.width/2, self.layoutRight.frame.size.height/2); self.role.frame = CGRectMake(0,15,self.profilUser.frame.size.width-20,50); self.gradient_transparent_black_view.frame = self.content.bounds; self.gradient_transparent_black.frame = self.gradient_transparent_black_view.bounds; first = NO; } } -(void) remplir{ if(self.person != nil){ [self.imageFond sd_setImageWithURL:[NSURL URLWithString:self.person.picture.href]]; // Partie de droite int margin = 0 ; self.ic_topstar.frame = CGRectZero; self.couronne.frame = CGRectZero; if (self.person.statistics != nil) { int top_rank = self.person.statistics.rankTopStar; self.ic_topstar.frame = CGRectMake(5,7,25,25); self.ic_topstar.contentMode = UIViewContentModeScaleAspectFit; margin = 10; switch (top_rank) { case 1: self.ic_topstar.image = [UIImage imageNamed:@"ic_topstar_1.png"]; self.ic_topstar.hidden = NO; self.couronne.frame = CGRectMake(self.content.frame.size.width - 90,0,100,100); break; case 2: self.ic_topstar.image = [UIImage imageNamed:@"ic_topstar_2.png"]; self.ic_topstar.hidden = NO; break; case 3: self.ic_topstar.image = [UIImage imageNamed:@"ic_topstar_3.png"]; self.ic_topstar.hidden = NO; break; default: self.ic_topstar.hidden = true; margin = 0; self.ic_topstar.frame = CGRectZero; break; } } NSString * name = @" "; if(self.person.name.given !=nil) name = [NSString stringWithFormat:@"%@ ",self.person.name.given]; if(self.person.name.family !=nil) name = [name stringByAppendingString:self.person.name.family]; self.nameStar.frame = CGRectMake(self.ic_topstar.frame.size.width + margin,-5,self.profilUser.frame.size.width-self.ic_topstar.frame.size.width - margin,50); [self.nameStar setText:name]; @try { NSString * activities = [self.person getActivities]; if(activities.length >0){ [self.role setText:activities]; } else { [self.role setText:@"nr"]; } } @catch (NSException * e) { [self.role setText:@"nr"]; } } } @end ================================================ FILE: ociney/src/View/cell/OCStarCell.xib ================================================ ================================================ FILE: ociney/src/View/cell/SalleCell.h ================================================ // // SalleCell.h // ociney // // Created by Kevin De Jesus Ferreira on 29/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import #define SALLE_CELL_HEIGHT 115 #import "Theater.h" #import @interface SalleCell : UITableViewCell @property (strong,nonatomic) Theater * cinema; @property (strong,nonatomic) UIView * content; @property (strong,nonatomic) UIView * splash_stripes_repeat; @property (strong,nonatomic) UIView * horaires; @property (strong,nonatomic) UIView * gradient_black50_black20_view; @property (strong,nonatomic) UIView * gradient_black100_view; @property (strong,nonatomic) CAGradientLayer * gradient_black50_black20; @property (strong,nonatomic) CAGradientLayer * gradient_black100; @property (strong,nonatomic) UIImageView * logo_defaut; @property (strong,nonatomic) UIImageView * porte; @property (strong,nonatomic) UIImageView * ic_handicap; @property (strong,nonatomic) UIImageView * ic_nav; @property (strong,nonatomic) UILabel * nomCine; @property (strong,nonatomic) UILabel * adresse; @property (strong,nonatomic) UILabel * distance; @property (strong,nonatomic) CLLocation *fromLocation; // Fonctions -(void)chargerAvecSalle:(Theater *)cinema; @end ================================================ FILE: ociney/src/View/cell/SalleCell.m ================================================ // // SalleCell.m // ociney // // Created by Kevin De Jesus Ferreira on 29/11/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import "SalleCell.h" #import "Color+Hex.h" #import "OCAppDelegate.h" @implementation SalleCell { BOOL notFirst; } - (void)awakeFromNib { [super layoutSubviews]; if(!notFirst) [self creer]; } -(void)creer { self.content = [[UIView alloc]initWithFrame:CGRectZero]; [self.content setBackgroundColor:[UIColor colorFromHexString:@"A0A0A0"]]; { self.gradient_black50_black20_view = [[UIView alloc]initWithFrame:CGRectZero]; { self.gradient_black50_black20 = [CAGradientLayer layer]; self.gradient_black50_black20.colors = [NSArray arrayWithObjects:(id)[[UIColor colorFromHexString:BLACK50] CGColor], (id)[[UIColor colorFromHexString:BLACK20] CGColor], nil]; [self.gradient_black50_black20_view.layer insertSublayer:self.gradient_black50_black20 atIndex:0]; } [self.content addSubview:self.gradient_black50_black20_view]; self.gradient_black100_view = [[UIView alloc]initWithFrame:CGRectZero]; self.gradient_black100_view.alpha = 0.2f; { self.gradient_black100 = [CAGradientLayer layer]; self.gradient_black100.colors = [NSArray arrayWithObjects:(id)[[UIColor clearColor] CGColor], (id)[[UIColor blackColor] CGColor], nil]; [self.gradient_black100_view.layer insertSublayer:self.gradient_black100 atIndex:0]; } [self.content addSubview:self.gradient_black100_view]; self.splash_stripes_repeat = [[UIView alloc] initWithFrame:CGRectZero]; self.splash_stripes_repeat.alpha = 0.1f; [self.splash_stripes_repeat setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"splash_motif_stripes_black.png"]]]; [self.content addSubview:self.splash_stripes_repeat]; self.logo_defaut = [[UIImageView alloc]initWithFrame:CGRectZero]; self.logo_defaut.image = [UIImage imageNamed:@"logo_default.png"]; self.logo_defaut.alpha = 0.1f; self.logo_defaut.contentMode = UIViewContentModeScaleAspectFill; [self.content addSubview:self.logo_defaut]; self.horaires = [[UIView alloc]initWithFrame:CGRectZero]; [self.horaires setBackgroundColor:[UIColor colorFromHexString:BLACK70]]; [self.content addSubview:self.horaires]; self.nomCine = [[UILabel alloc]initWithFrame:CGRectZero]; self.nomCine.font = [UIFont fontWithName:BOLD size:15]; [self.nomCine setTextColor:[UIColor colorFromHexString:WHITE95]]; [self.content addSubview:self.nomCine]; self.adresse = [[UILabel alloc]initWithFrame:CGRectZero]; self.adresse.font = [UIFont fontWithName:LIGHT size:11]; [self.adresse setTextColor:[UIColor colorFromHexString:WHITE85]]; [self.content addSubview:self.adresse]; self.distance = [[UILabel alloc]initWithFrame:CGRectZero]; self.distance.font = [UIFont fontWithName:LIGHT size:11]; self.distance.textAlignment = NSTextAlignmentRight; [self.distance setTextColor:[UIColor colorFromHexString:WHITE90]]; [self.content addSubview:self.distance]; self.ic_nav = [[UIImageView alloc]initWithFrame:CGRectZero]; self.ic_nav.image = [UIImage imageNamed:@"ic_nav.png"]; self.ic_nav.contentMode = UIViewContentModeScaleAspectFit; [self.content addSubview:self.ic_nav]; self.porte = [[UIImageView alloc]initWithFrame:CGRectZero]; self.porte.image = [UIImage imageNamed:@"porte.png"]; self.porte.contentMode = UIViewContentModeScaleAspectFit; [self.content addSubview:self.porte]; self.ic_handicap = [[UIImageView alloc]initWithFrame:CGRectZero]; self.ic_handicap.image = [UIImage imageNamed:@"ic_handicap_skew.png"]; self.ic_handicap.contentMode = UIViewContentModeScaleAspectFit; [self.content addSubview:self.ic_handicap]; } [self.contentView addSubview:self.content]; } -(void)chargerAvecSalle:(Theater *)cinema{ self.cinema = cinema; OCAppDelegate *app = APP_DELEGATE; self.fromLocation = app.myLocationGPS; [self remplir]; } -(void)placer { if(!notFirst) { notFirst = YES; self.content.frame = CGRectMake(0,0,self.contentView.frame.size.width,SALLE_CELL_HEIGHT); self.content.clipsToBounds = YES; self.gradient_black50_black20_view.frame = self.content.bounds; self.gradient_black50_black20.frame = self.gradient_black50_black20_view.bounds; self.gradient_black100_view.frame = self.content.bounds; self.gradient_black100.frame = self.gradient_black100_view.bounds; self.splash_stripes_repeat.frame = self.content.bounds; int sizeImage = 150; self.logo_defaut.frame = CGRectMake(self.content.frame.size.width - sizeImage, 0, sizeImage, SALLE_CELL_HEIGHT); self.horaires.frame = CGRectMake(0,self.content.frame.size.height - 25, self.content.frame.size.width, 25); self.nomCine.frame = CGRectMake(100,self.horaires.frame.origin.y - 40, 200, 20); self.adresse.frame = CGRectMake(100,self.horaires.frame.origin.y - 22, 200, 20); self.distance.frame = CGRectMake(self.content.frame.size.width - 75 ,self.horaires.frame.origin.y - 22, 70, 20); self.porte.frame = CGRectMake(0,0, 100, SALLE_CELL_HEIGHT); self.ic_handicap.frame = CGRectMake(20, 40, 20, 20); } } -(void) remplir{ self.hidden = NO; if(self.cinema == nil) self.hidden = YES; [self placer]; [self chargerEnFonctionDuCinema]; [self.nomCine setText:self.cinema.name]; [self.adresse setText:[NSString stringWithFormat:@"%@ %@",self.cinema.postalCode,self.cinema.city]]; CLLocation *locTo = [[CLLocation alloc] initWithLatitude:self.cinema.geoloc.lat longitude:self.cinema.geoloc._long]; CLLocationDistance distance = [self.fromLocation distanceFromLocation:locTo]; distance = distance /1000; [self.distance setText:[NSString stringWithFormat:@" %0.1f km",distance]]; [self.distance sizeToFit]; self.distance.frame = CGRectMake(self.content.frame.size.width - self.distance.frame.size.width - 5, self.horaires.frame.origin.y - self.distance.frame.size.height - 3 , self.distance.frame.size.width, self.distance.frame.size.height); self.ic_nav.frame = CGRectMake(self.distance.frame.origin.x - 15 ,self.distance.frame.origin.y +1 , 10, 10); if(self.cinema.geoloc == nil){ self.ic_nav.hidden = YES; self.distance.hidden = YES; } if (self.cinema.hasPRMAccess == 1) self.ic_handicap.hidden = NO; else self.ic_handicap.hidden = YES; } -(void) chargerEnFonctionDuCinema { NSString * name = [[self.cinema.name stringByReplacingOccurrencesOfString:@"é" withString:@"e"] uppercaseString]; NSString * imageFond; NSString * couleurFond = @"#E0E0E0"; if([name containsString:@"CGR"]){ couleurFond = @"#ff8171"; imageFond = @"logo_cgr.png"; } else if([name containsString:@"GAUMONT"]){ couleurFond = @"#d9002f"; imageFond = @"logo_gaumont.png"; } else if([name containsString:@"GAUMONT-PATHE"]){ couleurFond = @"#eba14c"; imageFond = @"logo_gaumont_pathe.png"; } else if([name containsString:@"KINEPOLIS"]){ couleurFond = @"#2170a1"; imageFond = @"logo_kinepolis.png"; } else if([name containsString:@"MEGARAMA"]){ couleurFond = @"#6990ff"; imageFond = @"logo_megarama.png"; } else if([name containsString:@"MK2"]){ couleurFond = @"#505050"; imageFond = @"logo_mk2.png"; } else if([name containsString:@"PATHE"]){ couleurFond = @"#dac872"; imageFond = @"logo_pathe.png"; } else if([name containsString:@"UGC"]){ couleurFond = @"#4763bf"; imageFond = @"logo_ugc.png"; } else { couleurFond = @"#A0A0A0"; imageFond = @"logo_default.png"; } self.logo_defaut.image = [UIImage imageNamed:imageFond]; [self.content setBackgroundColor:[UIColor colorFromHexString:couleurFond]]; } @end ================================================ FILE: ociney/src/View/cell/SalleCell.xib ================================================ ================================================ FILE: ociney.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 23F8042BDB86E09C6B51AB7B /* libPods-ociney.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8117E5A1CB1AF729DD43F835 /* libPods-ociney.a */; }; 4AA1874319F6D7CD00B91E25 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AA1874219F6D7CD00B91E25 /* Foundation.framework */; }; 4AA1874519F6D7CD00B91E25 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AA1874419F6D7CD00B91E25 /* CoreGraphics.framework */; }; 4AA1874719F6D7CD00B91E25 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AA1874619F6D7CD00B91E25 /* UIKit.framework */; }; 4AA1874D19F6D7CD00B91E25 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4AA1874B19F6D7CD00B91E25 /* InfoPlist.strings */; }; 4AA1874F19F6D7CD00B91E25 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AA1874E19F6D7CD00B91E25 /* main.m */; }; 4AA1875319F6D7CD00B91E25 /* OCAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AA1875219F6D7CD00B91E25 /* OCAppDelegate.m */; }; 4AA1875919F6D7CD00B91E25 /* OCSplashViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AA1875819F6D7CD00B91E25 /* OCSplashViewController.m */; }; 4AA1875B19F6D7CD00B91E25 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4AA1875A19F6D7CD00B91E25 /* Images.xcassets */; }; 4AA1876219F6D7CE00B91E25 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AA1876119F6D7CD00B91E25 /* XCTest.framework */; }; 4AA1876319F6D7CE00B91E25 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AA1874219F6D7CD00B91E25 /* Foundation.framework */; }; 4AA1876419F6D7CE00B91E25 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AA1874619F6D7CD00B91E25 /* UIKit.framework */; }; 4AA1876C19F6D7CE00B91E25 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4AA1876A19F6D7CE00B91E25 /* InfoPlist.strings */; }; 4AA1876E19F6D7CE00B91E25 /* ocineyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AA1876D19F6D7CE00B91E25 /* ocineyTests.m */; }; 4AA1877C19F6DE8200B91E25 /* Color+Hex.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AA1877B19F6DE8200B91E25 /* Color+Hex.m */; }; 4AA1878119F6E06B00B91E25 /* splash_motif_stripes_black.png in Resources */ = {isa = PBXBuildFile; fileRef = 4AA1878019F6E06B00B91E25 /* splash_motif_stripes_black.png */; }; 4AA1878419F6ED4700B91E25 /* ic_glass_reflect_color_big.png in Resources */ = {isa = PBXBuildFile; fileRef = 4AA1878219F6ED4700B91E25 /* ic_glass_reflect_color_big.png */; }; 4AA1878519F6ED4700B91E25 /* ic_txt_ociney.png in Resources */ = {isa = PBXBuildFile; fileRef = 4AA1878319F6ED4700B91E25 /* ic_txt_ociney.png */; }; 8F2537281A079A7100D88B7D /* HeaderMovieDetail.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F2537271A079A7100D88B7D /* HeaderMovieDetail.m */; }; 8F25372D1A07FF2500D88B7D /* MovieDetailContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F25372C1A07FF2500D88B7D /* MovieDetailContent.m */; }; 8F25373D1A0A221E00D88B7D /* LoadMovieFullTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F25373C1A0A221E00D88B7D /* LoadMovieFullTask.m */; }; 8F310D041A2DEEA2002618B1 /* RechercheTaskTheater.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F310D031A2DEEA2002618B1 /* RechercheTaskTheater.m */; }; 8F310D081A2E1399002618B1 /* OCTheaterDetailController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F310D071A2E1399002618B1 /* OCTheaterDetailController.m */; }; 8F310D0C1A2E1F4E002618B1 /* charniere.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F310D091A2E1F4E002618B1 /* charniere.png */; }; 8F310D0D1A2E1F4E002618B1 /* serrure.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F310D0A1A2E1F4E002618B1 /* serrure.png */; }; 8F310D0E1A2E1F4E002618B1 /* wood_frame.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F310D0B1A2E1F4E002618B1 /* wood_frame.png */; }; 8F310D121A2E27DB002618B1 /* PosterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F310D111A2E27DB002618B1 /* PosterView.m */; }; 8F35FF8A1A0113E000C4F6D8 /* OCStarListController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F35FF891A0113E000C4F6D8 /* OCStarListController.m */; }; 8F35FF8E1A01152300C4F6D8 /* OCLoadStarsTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F35FF8D1A01152300C4F6D8 /* OCLoadStarsTask.m */; }; 8F35FF921A01199000C4F6D8 /* Person.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F35FF911A01199000C4F6D8 /* Person.m */; }; 8F35FF971A011EBB00C4F6D8 /* OCStarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F35FF951A011EBB00C4F6D8 /* OCStarCell.m */; }; 8F35FF981A011EBB00C4F6D8 /* OCStarCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8F35FF961A011EBB00C4F6D8 /* OCStarCell.xib */; }; 8F35FF9A1A01311D00C4F6D8 /* ic_placeholder_people.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F35FF991A01311D00C4F6D8 /* ic_placeholder_people.png */; }; 8F35FF9C1A01441000C4F6D8 /* ic_topstar_1.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F35FF9B1A01441000C4F6D8 /* ic_topstar_1.png */; }; 8F35FF9F1A0159BE00C4F6D8 /* ic_topstar_2.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F35FF9D1A0159BE00C4F6D8 /* ic_topstar_2.png */; }; 8F35FFA01A0159BE00C4F6D8 /* ic_topstar_3.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F35FF9E1A0159BE00C4F6D8 /* ic_topstar_3.png */; }; 8F547A1D1A5440F300D79E8A /* ic_bandeannonce_30.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F547A1A1A5440F300D79E8A /* ic_bandeannonce_30.png */; }; 8F547A1E1A5440F300D79E8A /* ic_bandeannonce_80.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F547A1B1A5440F300D79E8A /* ic_bandeannonce_80.png */; }; 8F547A1F1A5440F300D79E8A /* ic_bandeannonce.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F547A1C1A5440F300D79E8A /* ic_bandeannonce.png */; }; 8F547A231A5440FE00D79E8A /* ic_picture_30.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F547A201A5440FE00D79E8A /* ic_picture_30.png */; }; 8F547A241A5440FE00D79E8A /* ic_picture_80.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F547A211A5440FE00D79E8A /* ic_picture_80.png */; }; 8F547A251A5440FE00D79E8A /* ic_picture.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F547A221A5440FE00D79E8A /* ic_picture.png */; }; 8F547A291A54461300D79E8A /* LoadBandeAnnonceFilmTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F547A281A54461300D79E8A /* LoadBandeAnnonceFilmTask.m */; }; 8F547A2C1A5453EA00D79E8A /* OCMovieBandeAnnonceSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F547A2B1A5453EA00D79E8A /* OCMovieBandeAnnonceSlider.m */; }; 8F547A2E1A54674400D79E8A /* pellicule.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F547A2D1A54674400D79E8A /* pellicule.png */; }; 8F547A301A54774300D79E8A /* play.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F547A2F1A54774300D79E8A /* play.png */; }; 8F547A341A57381A00D79E8A /* RechercheTaskStar.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F547A331A57381A00D79E8A /* RechercheTaskStar.m */; }; 8F547A371A57400900D79E8A /* AllocineResponseSmall.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F547A361A57400900D79E8A /* AllocineResponseSmall.m */; }; 8F547A3B1A5740EB00D79E8A /* FeedSmall.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F547A3A1A5740EB00D79E8A /* FeedSmall.m */; }; 8F547A3E1A57F7D600D79E8A /* arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F547A3D1A57F7D600D79E8A /* arrow.png */; }; 8F547A421A57FCB600D79E8A /* OCEmptyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F547A411A57FCB600D79E8A /* OCEmptyView.m */; }; 8F547A461A58081B00D79E8A /* OCEmptyViewGPS.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F547A451A58081B00D79E8A /* OCEmptyViewGPS.m */; }; 8F750E1A1A1CEC7300D9733B /* ic_action_search.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F750E191A1CEC7300D9733B /* ic_action_search.png */; }; 8F750E1C1A1E6B7200D9733B /* search-25.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F750E1B1A1E6B7200D9733B /* search-25.png */; }; 8F76036519FA6ED000E9A9B9 /* OCListMovieViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F76036419FA6ED000E9A9B9 /* OCListMovieViewController.m */; }; 8F76036B19FA871200E9A9B9 /* OCMovieCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F76036A19FA871200E9A9B9 /* OCMovieCell.m */; }; 8F76036D19FA895B00E9A9B9 /* OCMovieCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8F76036C19FA895B00E9A9B9 /* OCMovieCell.xib */; }; 8F76037C19FAA37700E9A9B9 /* TTBlackTriangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F76037019FAA37700E9A9B9 /* TTBlackTriangle.m */; }; 8F76037D19FAA37700E9A9B9 /* TTScrollSlidingPagesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F76037219FAA37700E9A9B9 /* TTScrollSlidingPagesController.m */; }; 8F76037E19FAA37700E9A9B9 /* TTScrollViewWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F76037419FAA37700E9A9B9 /* TTScrollViewWrapper.m */; }; 8F76037F19FAA37700E9A9B9 /* TTSlidingPage.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F76037719FAA37700E9A9B9 /* TTSlidingPage.m */; }; 8F76038019FAA37700E9A9B9 /* TTSlidingPageTitle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F76037A19FAA37700E9A9B9 /* TTSlidingPageTitle.m */; }; 8F76038419FAA4B800E9A9B9 /* LeftViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F76038319FAA4B800E9A9B9 /* LeftViewController.m */; }; 8F76038619FAA5AD00E9A9B9 /* menu.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F76038519FAA5AD00E9A9B9 /* menu.png */; }; 8F8EDB4A1A29F1AD00383D27 /* ListSallesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F8EDB491A29F1AD00383D27 /* ListSallesController.m */; }; 8F8EDB4E1A29F3AF00383D27 /* SalleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F8EDB4D1A29F3AF00383D27 /* SalleCell.m */; }; 8F8EDB521A29F72700383D27 /* OCLoadTheatersTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F8EDB511A29F72700383D27 /* OCLoadTheatersTask.m */; }; 8F8EDB541A29FFFD00383D27 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F8EDB531A29FFFD00383D27 /* CoreLocation.framework */; }; 8F8EDB561A2A144C00383D27 /* SalleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB551A2A144C00383D27 /* SalleCell.xib */; }; 8F8EDB581A2A18DE00383D27 /* logo_default.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB571A2A18DE00383D27 /* logo_default.png */; }; 8F8EDB5A1A2A21A500383D27 /* porte.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB591A2A21A500383D27 /* porte.png */; }; 8F8EDB5C1A2A235300383D27 /* ic_handicap_skew.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB5B1A2A235300383D27 /* ic_handicap_skew.png */; }; 8F8EDB5E1A2A31D700383D27 /* ic_nav.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB5D1A2A31D700383D27 /* ic_nav.png */; }; 8F8EDB681A2A3C8C00383D27 /* logo_cgr.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB5F1A2A3C8C00383D27 /* logo_cgr.png */; }; 8F8EDB691A2A3C8C00383D27 /* logo_cineville.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB601A2A3C8C00383D27 /* logo_cineville.png */; }; 8F8EDB6A1A2A3C8C00383D27 /* logo_gaumont_pathe.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB611A2A3C8C00383D27 /* logo_gaumont_pathe.png */; }; 8F8EDB6B1A2A3C8C00383D27 /* logo_gaumont.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB621A2A3C8C00383D27 /* logo_gaumont.png */; }; 8F8EDB6C1A2A3C8C00383D27 /* logo_kinepolis.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB631A2A3C8C00383D27 /* logo_kinepolis.png */; }; 8F8EDB6D1A2A3C8C00383D27 /* logo_megarama.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB641A2A3C8C00383D27 /* logo_megarama.png */; }; 8F8EDB6E1A2A3C8C00383D27 /* logo_mk2.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB651A2A3C8C00383D27 /* logo_mk2.png */; }; 8F8EDB6F1A2A3C8C00383D27 /* logo_pathe.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB661A2A3C8C00383D27 /* logo_pathe.png */; }; 8F8EDB701A2A3C8C00383D27 /* logo_ugc.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8EDB671A2A3C8C00383D27 /* logo_ugc.png */; }; 8F8F87331A14FC90008DABC2 /* plus_white.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8F87321A14FC90008DABC2 /* plus_white.png */; }; 8F8F87351A14FC99008DABC2 /* plus_dashed_photos_white.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F8F87341A14FC99008DABC2 /* plus_dashed_photos_white.png */; }; 8FA166C01A1F5FA2005D4F03 /* RechercheTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA166BF1A1F5FA2005D4F03 /* RechercheTask.m */; }; 8FA166C41A1F6079005D4F03 /* RechercheTaskMovie.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA166C31A1F6079005D4F03 /* RechercheTaskMovie.m */; }; 8FA8BFF31A307D7200ABE716 /* folded_effect.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FA8BFF21A307D7200ABE716 /* folded_effect.png */; }; 8FA8BFF51A30833800ABE716 /* reflet_framewood.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FA8BFF41A30833800ABE716 /* reflet_framewood.png */; }; 8FA8C00C1A31DE4A00ABE716 /* OCPosterController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA8C00B1A31DE4A00ABE716 /* OCPosterController.m */; }; 8FAB1B1519FCFAAE0064F073 /* AsyncTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B1419FCFAAE0064F073 /* AsyncTask.m */; }; 8FAB1B1A19FCFB810064F073 /* OCLoadMoviesTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B1919FCFB810064F073 /* OCLoadMoviesTask.m */; }; 8FAB1B1C19FD02EB0064F073 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8FAB1B1B19FD02EB0064F073 /* Security.framework */; }; 8FAB1B1E19FD02F70064F073 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8FAB1B1D19FD02F70064F073 /* QuartzCore.framework */; }; 8FAB1B2019FD030C0064F073 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8FAB1B1F19FD030C0064F073 /* SystemConfiguration.framework */; }; 8FAB1B2519FE64A80064F073 /* AllocineResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B2419FE64A80064F073 /* AllocineResponse.m */; }; 8FAB1B2919FE658B0064F073 /* Feed.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B2819FE658B0064F073 /* Feed.m */; }; 8FAB1B2D19FE673C0064F073 /* Movie.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B2C19FE673C0064F073 /* Movie.m */; }; 8FAB1B3119FE6CE90064F073 /* Theater.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B3019FE6CE90064F073 /* Theater.m */; }; 8FAB1B3519FE76780064F073 /* PersonFull.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B3419FE76780064F073 /* PersonFull.m */; }; 8FAB1B3919FE77A40064F073 /* ModelObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B3819FE77A40064F073 /* ModelObject.m */; }; 8FAB1B3D19FE78B40064F073 /* Name.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B3C19FE78B40064F073 /* Name.m */; }; 8FAB1B4119FE79F30064F073 /* TheaterShowtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B4019FE79F30064F073 /* TheaterShowtime.m */; }; 8FAB1B4519FE7B080064F073 /* Place.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B4419FE7B080064F073 /* Place.m */; }; 8FAB1B4919FE7C090064F073 /* MovieShowtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B4819FE7C090064F073 /* MovieShowtime.m */; }; 8FAB1B4D19FE7CEC0064F073 /* Version.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B4C19FE7CEC0064F073 /* Version.m */; }; 8FAB1B5119FE7D6A0064F073 /* OnShow.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B5019FE7D6A0064F073 /* OnShow.m */; }; 8FAB1B5519FE7DEC0064F073 /* Scr.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B5419FE7DEC0064F073 /* Scr.m */; }; 8FAB1B5919FE87140064F073 /* Horaires.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B5819FE87140064F073 /* Horaires.m */; }; 8FAB1B5D19FE886A0064F073 /* Picture.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B5C19FE886A0064F073 /* Picture.m */; }; 8FAB1B6119FE89410064F073 /* Geoloc.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B6019FE89410064F073 /* Geoloc.m */; }; 8FAB1B6519FE8C0D0064F073 /* Media.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B6419FE8C0D0064F073 /* Media.m */; }; 8FAB1B6919FE8DF40064F073 /* Thumbnail.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B6819FE8DF40064F073 /* Thumbnail.m */; }; 8FAB1B6D19FE8EDA0064F073 /* Rendition.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B6C19FE8EDA0064F073 /* Rendition.m */; }; 8FAB1B7119FE90150064F073 /* Publication.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B7019FE90150064F073 /* Publication.m */; }; 8FAB1B7519FE90BC0064F073 /* Statistics.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B7419FE90BC0064F073 /* Statistics.m */; }; 8FAB1B7A19FE92A80064F073 /* Link.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B7919FE92A80064F073 /* Link.m */; }; 8FAB1B7E19FE931B0064F073 /* Subject.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B7D19FE931B0064F073 /* Subject.m */; }; 8FAB1B8219FE93F20064F073 /* MovieType.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B8119FE93F20064F073 /* MovieType.m */; }; 8FAB1B8619FE94450064F073 /* DefaultMedia.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B8519FE94450064F073 /* DefaultMedia.m */; }; 8FAB1B8A19FE95280064F073 /* Release.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B8919FE95280064F073 /* Release.m */; }; 8FAB1B8E19FE95E10064F073 /* Distributor.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B8D19FE95E10064F073 /* Distributor.m */; }; 8FAB1B9219FE965A0064F073 /* CastingShort.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B9119FE965A0064F073 /* CastingShort.m */; }; 8FAB1B9619FE96CC0064F073 /* Trailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B9519FE96CC0064F073 /* Trailer.m */; }; 8FAB1B9A19FE97290064F073 /* Poster.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B9919FE97290064F073 /* Poster.m */; }; 8FAB1B9E19FE97700064F073 /* News.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1B9D19FE97700064F073 /* News.m */; }; 8FAB1BA219FE987F0064F073 /* CastMember.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1BA119FE987F0064F073 /* CastMember.m */; }; 8FAB1BA619FE99160064F073 /* PersonSmall.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1BA519FE99160064F073 /* PersonSmall.m */; }; 8FAB1BAA19FE999F0064F073 /* Feature.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1BA919FE999F0064F073 /* Feature.m */; }; 8FAB1BAE19FE9A390064F073 /* Trivium.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1BAD19FE9A390064F073 /* Trivium.m */; }; 8FAB1BB219FE9A910064F073 /* HelpfulPositiveReview.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1BB119FE9A910064F073 /* HelpfulPositiveReview.m */; }; 8FAB1BB619FE9AF90064F073 /* Writer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1BB519FE9AF90064F073 /* Writer.m */; }; 8FAB1BBA19FE9B530064F073 /* HelpfulNegativeReview.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1BB919FE9B530064F073 /* HelpfulNegativeReview.m */; }; 8FAB1BBE19FE9BA10064F073 /* Review.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1BBD19FE9BA10064F073 /* Review.m */; }; 8FAB1BC219FE9C630064F073 /* NewsSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAB1BC119FE9C630064F073 /* NewsSource.m */; }; 8FB2115A1A48609500D40FA6 /* ic_version_white_3d.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FB211561A48609500D40FA6 /* ic_version_white_3d.png */; }; 8FB211601A489D2200D40FA6 /* SlidingImageControllerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB2115F1A489D2200D40FA6 /* SlidingImageControllerController.m */; }; 8FB211641A49A14700D40FA6 /* OCRechercheSearchBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB211631A49A14700D40FA6 /* OCRechercheSearchBarController.m */; }; 8FB3AFB11A04FAAC0075FDD6 /* ic_cropped_crown.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FB3AFB01A04FAAC0075FDD6 /* ic_cropped_crown.png */; }; 8FB3AFB71A04FF850075FDD6 /* ic_drawer_credits.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FB3AFB21A04FF850075FDD6 /* ic_drawer_credits.png */; }; 8FB3AFB81A04FF850075FDD6 /* ic_drawer_favoris.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FB3AFB31A04FF850075FDD6 /* ic_drawer_favoris.png */; }; 8FB3AFB91A04FF850075FDD6 /* ic_drawer_films.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FB3AFB41A04FF850075FDD6 /* ic_drawer_films.png */; }; 8FB3AFBA1A04FF850075FDD6 /* ic_drawer_salles.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FB3AFB51A04FF850075FDD6 /* ic_drawer_salles.png */; }; 8FB3AFBB1A04FF850075FDD6 /* ic_drawer_stars.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FB3AFB61A04FF850075FDD6 /* ic_drawer_stars.png */; }; 8FB3AFBF1A051F8E0075FDD6 /* GTAppMenuController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB3AFBE1A051F8E0075FDD6 /* GTAppMenuController.m */; }; 8FB3AFC31A0524F20075FDD6 /* MovieDetailController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB3AFC21A0524F20075FDD6 /* MovieDetailController.m */; }; 8FC02E5319FBC0C900121F1A /* star_off_med.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FC02E5119FBC0C900121F1A /* star_off_med.png */; }; 8FC02E5419FBC0C900121F1A /* star_on_med.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FC02E5219FBC0C900121F1A /* star_on_med.png */; }; 8FC02E5719FBC70800121F1A /* star_off_small.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FC02E5519FBC70800121F1A /* star_off_small.png */; }; 8FC02E5819FBC70800121F1A /* star_on_small.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FC02E5619FBC70800121F1A /* star_on_small.png */; }; 8FC02E6219FBE16D00121F1A /* ServiceSecurity.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FC02E6119FBE16D00121F1A /* ServiceSecurity.m */; }; 8FC02E6519FBEB8600121F1A /* AllocineService.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FC02E6419FBEB8600121F1A /* AllocineService.m */; }; 8FC889891A3624DC005873B2 /* long_shadow.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FC889881A3624DC005873B2 /* long_shadow.png */; }; 8FC8898D1A36271E005873B2 /* OCLoadTheaterMoviesTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FC8898C1A36271E005873B2 /* OCLoadTheaterMoviesTask.m */; }; E52C6C5A1A1F797500BF2A48 /* OCStarDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E52C6C591A1F797500BF2A48 /* OCStarDetailViewController.m */; }; E52F24D91A4B130400FE5C73 /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E52F24D71A4B130400FE5C73 /* Crashlytics.framework */; }; E52F24DA1A4B130400FE5C73 /* Fabric.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E52F24D81A4B130400FE5C73 /* Fabric.framework */; }; E5945EBE1A541E5B0009C30F /* OCLoadShowTimesTask.m in Sources */ = {isa = PBXBuildFile; fileRef = E5945EBD1A541E5B0009C30F /* OCLoadShowTimesTask.m */; }; E5945EC21A569C5F0009C30F /* OCMovieBandeAnnonceSliderElement.m in Sources */ = {isa = PBXBuildFile; fileRef = E5945EC11A569C5F0009C30F /* OCMovieBandeAnnonceSliderElement.m */; }; E5945EC41A56C6550009C30F /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5945EC31A56C6550009C30F /* MediaPlayer.framework */; }; E5945ECA1A56D32E0009C30F /* ic_version_white_2d.png in Resources */ = {isa = PBXBuildFile; fileRef = E5945EC61A56D32E0009C30F /* ic_version_white_2d.png */; }; E5945ECC1A56D32E0009C30F /* ic_version_white_vf.png in Resources */ = {isa = PBXBuildFile; fileRef = E5945EC81A56D32E0009C30F /* ic_version_white_vf.png */; }; E5945ECD1A56D32E0009C30F /* ic_version_white_vo.png in Resources */ = {isa = PBXBuildFile; fileRef = E5945EC91A56D32E0009C30F /* ic_version_white_vo.png */; }; E5945ED11A56F1380009C30F /* OCCreditsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E5945ED01A56F1380009C30F /* OCCreditsViewController.m */; }; E5945ED51A56F2860009C30F /* konami_flo.png in Resources */ = {isa = PBXBuildFile; fileRef = E5945ED21A56F2860009C30F /* konami_flo.png */; }; E5945ED61A56F2860009C30F /* konami_kevin.png in Resources */ = {isa = PBXBuildFile; fileRef = E5945ED31A56F2860009C30F /* konami_kevin.png */; }; E5945ED71A56F2860009C30F /* konami_pooley.png in Resources */ = {isa = PBXBuildFile; fileRef = E5945ED41A56F2860009C30F /* konami_pooley.png */; }; E5945ED91A56F2AD0009C30F /* ic_in_app_big.png in Resources */ = {isa = PBXBuildFile; fileRef = E5945ED81A56F2AD0009C30F /* ic_in_app_big.png */; }; E5945EDC1A56FDD70009C30F /* OCMovieDetailStarList.m in Sources */ = {isa = PBXBuildFile; fileRef = E5945EDB1A56FDD70009C30F /* OCMovieDetailStarList.m */; }; E5945EDF1A57005E0009C30F /* OCCastMember.m in Sources */ = {isa = PBXBuildFile; fileRef = E5945EDE1A57005E0009C30F /* OCCastMember.m */; }; E5A20D6E1A482928001B3EE0 /* StarDetail.m in Sources */ = {isa = PBXBuildFile; fileRef = E5A20D6D1A482928001B3EE0 /* StarDetail.m */; }; E5A20D711A482E8F001B3EE0 /* OCLoadPersonTask.m in Sources */ = {isa = PBXBuildFile; fileRef = E5A20D701A482E8F001B3EE0 /* OCLoadPersonTask.m */; }; E5A20D761A484551001B3EE0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5A20D781A484551001B3EE0 /* Localizable.strings */; }; E5A20D7B1A484F8F001B3EE0 /* DateUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E5A20D7A1A484F8F001B3EE0 /* DateUtils.m */; }; E5A20D7E1A4866AA001B3EE0 /* StarDetailPhotos.m in Sources */ = {isa = PBXBuildFile; fileRef = E5A20D7D1A4866AA001B3EE0 /* StarDetailPhotos.m */; }; E5A20D811A486982001B3EE0 /* plus_black.png in Resources */ = {isa = PBXBuildFile; fileRef = E5A20D7F1A486982001B3EE0 /* plus_black.png */; }; E5A20D821A486982001B3EE0 /* plus_dashed_photos_black.png in Resources */ = {isa = PBXBuildFile; fileRef = E5A20D801A486982001B3EE0 /* plus_dashed_photos_black.png */; }; E5A20D861A486C7F001B3EE0 /* OCStarPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = E5A20D851A486C7F001B3EE0 /* OCStarPhoto.m */; }; E5A20D881A487563001B3EE0 /* filmo_reflet.png in Resources */ = {isa = PBXBuildFile; fileRef = E5A20D871A487563001B3EE0 /* filmo_reflet.png */; }; E5A20D8B1A487C65001B3EE0 /* OCFilmoGridLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = E5A20D8A1A487C65001B3EE0 /* OCFilmoGridLayout.m */; }; E5A20D8E1A487DC3001B3EE0 /* OCFilmoElement.m in Sources */ = {isa = PBXBuildFile; fileRef = E5A20D8D1A487DC3001B3EE0 /* OCFilmoElement.m */; }; E5A413941A49C4160087E6F8 /* Participation.m in Sources */ = {isa = PBXBuildFile; fileRef = E5A413931A49C4160087E6F8 /* Participation.m */; }; E5A62A3B1A5ACB76002F92CC /* OCHeaderVersionView.m in Sources */ = {isa = PBXBuildFile; fileRef = E5A62A3A1A5ACB76002F92CC /* OCHeaderVersionView.m */; }; E5D1CD0F1A237F4B003C6B8F /* HeaderStarDetail.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D1CD0E1A237F4B003C6B8F /* HeaderStarDetail.m */; }; E5D1CD131A23820A003C6B8F /* OCDoubleController.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D1CD121A23820A003C6B8F /* OCDoubleController.m */; }; E5D1CD171A238501003C6B8F /* UIImage+Blur.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D1CD161A238501003C6B8F /* UIImage+Blur.m */; }; E5D1CD1E1A24886D003C6B8F /* OCListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D1CD1D1A24886D003C6B8F /* OCListViewController.m */; }; E5D1CD221A2490A7003C6B8F /* OCLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D1CD211A2490A7003C6B8F /* OCLoader.m */; }; E5D5A4DE1A519500003079FD /* OCMovieViewPager.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D5A4DD1A519500003079FD /* OCMovieViewPager.m */; }; E5D5A4E41A519FFC003079FD /* ic_filmo_30.png in Resources */ = {isa = PBXBuildFile; fileRef = E5D5A4E01A519FFC003079FD /* ic_filmo_30.png */; }; E5D5A4E51A519FFC003079FD /* ic_filmo_80.png in Resources */ = {isa = PBXBuildFile; fileRef = E5D5A4E11A519FFC003079FD /* ic_filmo_80.png */; }; E5D5A4E61A519FFC003079FD /* ic_picture2_30.png in Resources */ = {isa = PBXBuildFile; fileRef = E5D5A4E21A519FFC003079FD /* ic_picture2_30.png */; }; E5D5A4E71A519FFC003079FD /* ic_picture2_80.png in Resources */ = {isa = PBXBuildFile; fileRef = E5D5A4E31A519FFC003079FD /* ic_picture2_80.png */; }; E5D5A4EA1A51A5C9003079FD /* OCStarFilmoGrid.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D5A4E91A51A5C9003079FD /* OCStarFilmoGrid.m */; }; E5D5A4F71A52B5D0003079FD /* OCTheaterDetailMovieController.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D5A4F61A52B5D0003079FD /* OCTheaterDetailMovieController.m */; }; E5D5A4FC1A52B64E003079FD /* TheaterDetailMovieBackground.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D5A4FB1A52B64E003079FD /* TheaterDetailMovieBackground.m */; }; E5D5A5031A52B8B8003079FD /* cinema.png in Resources */ = {isa = PBXBuildFile; fileRef = E5D5A4FD1A52B8B8003079FD /* cinema.png */; }; E5D5A5041A52B8B8003079FD /* curtain_left.png in Resources */ = {isa = PBXBuildFile; fileRef = E5D5A4FE1A52B8B8003079FD /* curtain_left.png */; }; E5D5A5051A52B8B8003079FD /* curtain_right.png in Resources */ = {isa = PBXBuildFile; fileRef = E5D5A4FF1A52B8B8003079FD /* curtain_right.png */; }; E5D5A5061A52B8B8003079FD /* curtain_sub_left.png in Resources */ = {isa = PBXBuildFile; fileRef = E5D5A5001A52B8B8003079FD /* curtain_sub_left.png */; }; E5D5A5071A52B8B8003079FD /* curtain_sub_right.png in Resources */ = {isa = PBXBuildFile; fileRef = E5D5A5011A52B8B8003079FD /* curtain_sub_right.png */; }; E5D5A5081A52B8B8003079FD /* seats.png in Resources */ = {isa = PBXBuildFile; fileRef = E5D5A5021A52B8B8003079FD /* seats.png */; }; E5D5A50B1A52D540003079FD /* TheaterDetailMovieForeground.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D5A50A1A52D540003079FD /* TheaterDetailMovieForeground.m */; }; E5D5A50E1A52D80F003079FD /* TheaterDetailMoviePageHoraires.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D5A50D1A52D80F003079FD /* TheaterDetailMoviePageHoraires.m */; }; E5D5A5111A52E2F1003079FD /* ic_next.png in Resources */ = {isa = PBXBuildFile; fileRef = E5D5A50F1A52E2F1003079FD /* ic_next.png */; }; E5D5A5121A52E2F1003079FD /* ic_prev.png in Resources */ = {isa = PBXBuildFile; fileRef = E5D5A5101A52E2F1003079FD /* ic_prev.png */; }; E5D5A5151A52E4AF003079FD /* CellTheaterHoraires.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D5A5141A52E4AF003079FD /* CellTheaterHoraires.m */; }; E5D5A5181A530D7E003079FD /* MovieDetailTheaterList.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D5A5171A530D7E003079FD /* MovieDetailTheaterList.m */; }; E5DA62141A4AECD200DBC4DA /* ViewPager.m in Sources */ = {isa = PBXBuildFile; fileRef = E5DA62131A4AECD200DBC4DA /* ViewPager.m */; }; F85E4DBBC68F51171C0E5E19 /* OCStarViewPager.m in Sources */ = {isa = PBXBuildFile; fileRef = F85E46A0A457B0C7EF09749C /* OCStarViewPager.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 4AA1876519F6D7CE00B91E25 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 4AA1873719F6D7CD00B91E25 /* Project object */; proxyType = 1; remoteGlobalIDString = 4AA1873E19F6D7CD00B91E25; remoteInfo = ociney; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 4AA1873F19F6D7CD00B91E25 /* ociney.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ociney.app; sourceTree = BUILT_PRODUCTS_DIR; }; 4AA1874219F6D7CD00B91E25 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 4AA1874419F6D7CD00B91E25 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 4AA1874619F6D7CD00B91E25 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 4AA1874A19F6D7CD00B91E25 /* ociney-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "ociney-Info.plist"; sourceTree = ""; }; 4AA1874C19F6D7CD00B91E25 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 4AA1874E19F6D7CD00B91E25 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 4AA1875019F6D7CD00B91E25 /* ociney-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ociney-Prefix.pch"; sourceTree = ""; }; 4AA1875119F6D7CD00B91E25 /* OCAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OCAppDelegate.h; sourceTree = ""; }; 4AA1875219F6D7CD00B91E25 /* OCAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OCAppDelegate.m; sourceTree = ""; }; 4AA1875719F6D7CD00B91E25 /* OCSplashViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OCSplashViewController.h; path = ../../OCSplashViewController.h; sourceTree = ""; }; 4AA1875819F6D7CD00B91E25 /* OCSplashViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = OCSplashViewController.m; path = ../../OCSplashViewController.m; sourceTree = ""; }; 4AA1875A19F6D7CD00B91E25 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 4AA1876019F6D7CD00B91E25 /* ocineyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ocineyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 4AA1876119F6D7CD00B91E25 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 4AA1876919F6D7CE00B91E25 /* ocineyTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "ocineyTests-Info.plist"; sourceTree = ""; }; 4AA1876B19F6D7CE00B91E25 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 4AA1876D19F6D7CE00B91E25 /* ocineyTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ocineyTests.m; sourceTree = ""; }; 4AA1877A19F6DE8200B91E25 /* Color+Hex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Color+Hex.h"; sourceTree = ""; }; 4AA1877B19F6DE8200B91E25 /* Color+Hex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Color+Hex.m"; sourceTree = ""; }; 4AA1877D19F6DEA600B91E25 /* Constantes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Constantes.h; sourceTree = ""; }; 4AA1878019F6E06B00B91E25 /* splash_motif_stripes_black.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = splash_motif_stripes_black.png; sourceTree = ""; }; 4AA1878219F6ED4700B91E25 /* ic_glass_reflect_color_big.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_glass_reflect_color_big.png; sourceTree = ""; }; 4AA1878319F6ED4700B91E25 /* ic_txt_ociney.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_txt_ociney.png; sourceTree = ""; }; 4AA1878619F6F06600B91E25 /* ic_drawer_films.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_drawer_films.png; sourceTree = ""; }; 5E1573FEA25E8FC98B424C02 /* Pods-ociney.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ociney.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ociney/Pods-ociney.debug.xcconfig"; sourceTree = ""; }; 8117E5A1CB1AF729DD43F835 /* libPods-ociney.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ociney.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 8C1B5404BD66A4D412BA7FBC /* Pods-ociney.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ociney.release.xcconfig"; path = "Pods/Target Support Files/Pods-ociney/Pods-ociney.release.xcconfig"; sourceTree = ""; }; 8F2537261A079A7100D88B7D /* HeaderMovieDetail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HeaderMovieDetail.h; sourceTree = ""; }; 8F2537271A079A7100D88B7D /* HeaderMovieDetail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HeaderMovieDetail.m; sourceTree = ""; }; 8F25372B1A07FF2500D88B7D /* MovieDetailContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MovieDetailContent.h; sourceTree = ""; }; 8F25372C1A07FF2500D88B7D /* MovieDetailContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MovieDetailContent.m; sourceTree = ""; }; 8F25373B1A0A221E00D88B7D /* LoadMovieFullTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadMovieFullTask.h; sourceTree = ""; }; 8F25373C1A0A221E00D88B7D /* LoadMovieFullTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoadMovieFullTask.m; sourceTree = ""; }; 8F310D021A2DEEA2002618B1 /* RechercheTaskTheater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RechercheTaskTheater.h; sourceTree = ""; }; 8F310D031A2DEEA2002618B1 /* RechercheTaskTheater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RechercheTaskTheater.m; sourceTree = ""; }; 8F310D061A2E1399002618B1 /* OCTheaterDetailController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCTheaterDetailController.h; sourceTree = ""; }; 8F310D071A2E1399002618B1 /* OCTheaterDetailController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCTheaterDetailController.m; sourceTree = ""; }; 8F310D091A2E1F4E002618B1 /* charniere.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = charniere.png; sourceTree = ""; }; 8F310D0A1A2E1F4E002618B1 /* serrure.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = serrure.png; sourceTree = ""; }; 8F310D0B1A2E1F4E002618B1 /* wood_frame.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = wood_frame.png; sourceTree = ""; }; 8F310D101A2E27DB002618B1 /* PosterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PosterView.h; sourceTree = ""; }; 8F310D111A2E27DB002618B1 /* PosterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PosterView.m; sourceTree = ""; }; 8F35FF881A0113E000C4F6D8 /* OCStarListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCStarListController.h; sourceTree = ""; }; 8F35FF891A0113E000C4F6D8 /* OCStarListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCStarListController.m; sourceTree = ""; }; 8F35FF8C1A01152300C4F6D8 /* OCLoadStarsTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCLoadStarsTask.h; sourceTree = ""; }; 8F35FF8D1A01152300C4F6D8 /* OCLoadStarsTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCLoadStarsTask.m; sourceTree = ""; }; 8F35FF901A01199000C4F6D8 /* Person.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Person.h; sourceTree = ""; }; 8F35FF911A01199000C4F6D8 /* Person.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Person.m; sourceTree = ""; }; 8F35FF941A011EBB00C4F6D8 /* OCStarCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCStarCell.h; sourceTree = ""; }; 8F35FF951A011EBB00C4F6D8 /* OCStarCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCStarCell.m; sourceTree = ""; }; 8F35FF961A011EBB00C4F6D8 /* OCStarCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OCStarCell.xib; sourceTree = ""; }; 8F35FF991A01311D00C4F6D8 /* ic_placeholder_people.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_placeholder_people.png; sourceTree = ""; }; 8F35FF9B1A01441000C4F6D8 /* ic_topstar_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_topstar_1.png; sourceTree = ""; }; 8F35FF9D1A0159BE00C4F6D8 /* ic_topstar_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_topstar_2.png; sourceTree = ""; }; 8F35FF9E1A0159BE00C4F6D8 /* ic_topstar_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_topstar_3.png; sourceTree = ""; }; 8F547A1A1A5440F300D79E8A /* ic_bandeannonce_30.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_bandeannonce_30.png; sourceTree = ""; }; 8F547A1B1A5440F300D79E8A /* ic_bandeannonce_80.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_bandeannonce_80.png; sourceTree = ""; }; 8F547A1C1A5440F300D79E8A /* ic_bandeannonce.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_bandeannonce.png; sourceTree = ""; }; 8F547A201A5440FE00D79E8A /* ic_picture_30.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_picture_30.png; sourceTree = ""; }; 8F547A211A5440FE00D79E8A /* ic_picture_80.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_picture_80.png; sourceTree = ""; }; 8F547A221A5440FE00D79E8A /* ic_picture.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_picture.png; sourceTree = ""; }; 8F547A271A54461300D79E8A /* LoadBandeAnnonceFilmTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadBandeAnnonceFilmTask.h; sourceTree = ""; }; 8F547A281A54461300D79E8A /* LoadBandeAnnonceFilmTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoadBandeAnnonceFilmTask.m; sourceTree = ""; }; 8F547A2A1A5453EA00D79E8A /* OCMovieBandeAnnonceSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMovieBandeAnnonceSlider.h; sourceTree = ""; }; 8F547A2B1A5453EA00D79E8A /* OCMovieBandeAnnonceSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCMovieBandeAnnonceSlider.m; sourceTree = ""; }; 8F547A2D1A54674400D79E8A /* pellicule.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pellicule.png; sourceTree = ""; }; 8F547A2F1A54774300D79E8A /* play.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = play.png; sourceTree = ""; }; 8F547A321A57381A00D79E8A /* RechercheTaskStar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RechercheTaskStar.h; sourceTree = ""; }; 8F547A331A57381A00D79E8A /* RechercheTaskStar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RechercheTaskStar.m; sourceTree = ""; }; 8F547A351A57400900D79E8A /* AllocineResponseSmall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AllocineResponseSmall.h; sourceTree = ""; }; 8F547A361A57400900D79E8A /* AllocineResponseSmall.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AllocineResponseSmall.m; sourceTree = ""; }; 8F547A391A5740EB00D79E8A /* FeedSmall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FeedSmall.h; sourceTree = ""; }; 8F547A3A1A5740EB00D79E8A /* FeedSmall.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FeedSmall.m; sourceTree = ""; }; 8F547A3D1A57F7D600D79E8A /* arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = arrow.png; sourceTree = ""; }; 8F547A401A57FCB600D79E8A /* OCEmptyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCEmptyView.h; sourceTree = ""; }; 8F547A411A57FCB600D79E8A /* OCEmptyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCEmptyView.m; sourceTree = ""; }; 8F547A441A58081B00D79E8A /* OCEmptyViewGPS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCEmptyViewGPS.h; sourceTree = ""; }; 8F547A451A58081B00D79E8A /* OCEmptyViewGPS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCEmptyViewGPS.m; sourceTree = ""; }; 8F750E191A1CEC7300D9733B /* ic_action_search.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_action_search.png; sourceTree = ""; }; 8F750E1B1A1E6B7200D9733B /* search-25.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "search-25.png"; sourceTree = ""; }; 8F76036319FA6ED000E9A9B9 /* OCListMovieViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCListMovieViewController.h; sourceTree = ""; }; 8F76036419FA6ED000E9A9B9 /* OCListMovieViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCListMovieViewController.m; sourceTree = ""; }; 8F76036919FA871200E9A9B9 /* OCMovieCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMovieCell.h; sourceTree = ""; }; 8F76036A19FA871200E9A9B9 /* OCMovieCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCMovieCell.m; sourceTree = ""; }; 8F76036C19FA895B00E9A9B9 /* OCMovieCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OCMovieCell.xib; sourceTree = ""; }; 8F76036F19FAA37700E9A9B9 /* TTBlackTriangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTBlackTriangle.h; sourceTree = ""; }; 8F76037019FAA37700E9A9B9 /* TTBlackTriangle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTBlackTriangle.m; sourceTree = ""; }; 8F76037119FAA37700E9A9B9 /* TTScrollSlidingPagesController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTScrollSlidingPagesController.h; sourceTree = ""; }; 8F76037219FAA37700E9A9B9 /* TTScrollSlidingPagesController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTScrollSlidingPagesController.m; sourceTree = ""; }; 8F76037319FAA37700E9A9B9 /* TTScrollViewWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTScrollViewWrapper.h; sourceTree = ""; }; 8F76037419FAA37700E9A9B9 /* TTScrollViewWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTScrollViewWrapper.m; sourceTree = ""; }; 8F76037519FAA37700E9A9B9 /* TTSliddingPageDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTSliddingPageDelegate.h; sourceTree = ""; }; 8F76037619FAA37700E9A9B9 /* TTSlidingPage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTSlidingPage.h; sourceTree = ""; }; 8F76037719FAA37700E9A9B9 /* TTSlidingPage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTSlidingPage.m; sourceTree = ""; }; 8F76037819FAA37700E9A9B9 /* TTSlidingPagesDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTSlidingPagesDataSource.h; sourceTree = ""; }; 8F76037919FAA37700E9A9B9 /* TTSlidingPageTitle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTSlidingPageTitle.h; sourceTree = ""; }; 8F76037A19FAA37700E9A9B9 /* TTSlidingPageTitle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTSlidingPageTitle.m; sourceTree = ""; }; 8F76037B19FAA37700E9A9B9 /* TTUIScrollViewSlidingPages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTUIScrollViewSlidingPages.h; sourceTree = ""; }; 8F76038219FAA4B800E9A9B9 /* LeftViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LeftViewController.h; sourceTree = ""; }; 8F76038319FAA4B800E9A9B9 /* LeftViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LeftViewController.m; sourceTree = ""; }; 8F76038519FAA5AD00E9A9B9 /* menu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menu.png; sourceTree = ""; }; 8F8EDB481A29F1AD00383D27 /* ListSallesController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListSallesController.h; sourceTree = ""; }; 8F8EDB491A29F1AD00383D27 /* ListSallesController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListSallesController.m; sourceTree = ""; }; 8F8EDB4C1A29F3AF00383D27 /* SalleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SalleCell.h; sourceTree = ""; }; 8F8EDB4D1A29F3AF00383D27 /* SalleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SalleCell.m; sourceTree = ""; }; 8F8EDB501A29F72700383D27 /* OCLoadTheatersTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCLoadTheatersTask.h; sourceTree = ""; }; 8F8EDB511A29F72700383D27 /* OCLoadTheatersTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCLoadTheatersTask.m; sourceTree = ""; }; 8F8EDB531A29FFFD00383D27 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; 8F8EDB551A2A144C00383D27 /* SalleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SalleCell.xib; sourceTree = ""; }; 8F8EDB571A2A18DE00383D27 /* logo_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo_default.png; sourceTree = ""; }; 8F8EDB591A2A21A500383D27 /* porte.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = porte.png; sourceTree = ""; }; 8F8EDB5B1A2A235300383D27 /* ic_handicap_skew.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_handicap_skew.png; sourceTree = ""; }; 8F8EDB5D1A2A31D700383D27 /* ic_nav.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_nav.png; sourceTree = ""; }; 8F8EDB5F1A2A3C8C00383D27 /* logo_cgr.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo_cgr.png; sourceTree = ""; }; 8F8EDB601A2A3C8C00383D27 /* logo_cineville.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo_cineville.png; sourceTree = ""; }; 8F8EDB611A2A3C8C00383D27 /* logo_gaumont_pathe.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo_gaumont_pathe.png; sourceTree = ""; }; 8F8EDB621A2A3C8C00383D27 /* logo_gaumont.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo_gaumont.png; sourceTree = ""; }; 8F8EDB631A2A3C8C00383D27 /* logo_kinepolis.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo_kinepolis.png; sourceTree = ""; }; 8F8EDB641A2A3C8C00383D27 /* logo_megarama.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo_megarama.png; sourceTree = ""; }; 8F8EDB651A2A3C8C00383D27 /* logo_mk2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo_mk2.png; sourceTree = ""; }; 8F8EDB661A2A3C8C00383D27 /* logo_pathe.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo_pathe.png; sourceTree = ""; }; 8F8EDB671A2A3C8C00383D27 /* logo_ugc.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo_ugc.png; sourceTree = ""; }; 8F8F87321A14FC90008DABC2 /* plus_white.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = plus_white.png; sourceTree = ""; }; 8F8F87341A14FC99008DABC2 /* plus_dashed_photos_white.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = plus_dashed_photos_white.png; sourceTree = ""; }; 8FA166BE1A1F5FA2005D4F03 /* RechercheTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RechercheTask.h; sourceTree = ""; }; 8FA166BF1A1F5FA2005D4F03 /* RechercheTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RechercheTask.m; sourceTree = ""; }; 8FA166C21A1F6079005D4F03 /* RechercheTaskMovie.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RechercheTaskMovie.h; sourceTree = ""; }; 8FA166C31A1F6079005D4F03 /* RechercheTaskMovie.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RechercheTaskMovie.m; sourceTree = ""; }; 8FA8BFF21A307D7200ABE716 /* folded_effect.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = folded_effect.png; sourceTree = ""; }; 8FA8BFF41A30833800ABE716 /* reflet_framewood.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = reflet_framewood.png; sourceTree = ""; }; 8FA8C00A1A31DE4A00ABE716 /* OCPosterController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCPosterController.h; sourceTree = ""; }; 8FA8C00B1A31DE4A00ABE716 /* OCPosterController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCPosterController.m; sourceTree = ""; }; 8FAB1B1319FCFAAE0064F073 /* AsyncTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncTask.h; sourceTree = ""; }; 8FAB1B1419FCFAAE0064F073 /* AsyncTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AsyncTask.m; sourceTree = ""; }; 8FAB1B1819FCFB810064F073 /* OCLoadMoviesTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCLoadMoviesTask.h; sourceTree = ""; }; 8FAB1B1919FCFB810064F073 /* OCLoadMoviesTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCLoadMoviesTask.m; sourceTree = ""; }; 8FAB1B1B19FD02EB0064F073 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 8FAB1B1D19FD02F70064F073 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 8FAB1B1F19FD030C0064F073 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; 8FAB1B2319FE64A80064F073 /* AllocineResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AllocineResponse.h; sourceTree = ""; }; 8FAB1B2419FE64A80064F073 /* AllocineResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AllocineResponse.m; sourceTree = ""; }; 8FAB1B2719FE658B0064F073 /* Feed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Feed.h; sourceTree = ""; }; 8FAB1B2819FE658B0064F073 /* Feed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Feed.m; sourceTree = ""; }; 8FAB1B2B19FE673C0064F073 /* Movie.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Movie.h; sourceTree = ""; }; 8FAB1B2C19FE673C0064F073 /* Movie.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Movie.m; sourceTree = ""; }; 8FAB1B2F19FE6CE90064F073 /* Theater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Theater.h; sourceTree = ""; }; 8FAB1B3019FE6CE90064F073 /* Theater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Theater.m; sourceTree = ""; }; 8FAB1B3319FE76780064F073 /* PersonFull.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PersonFull.h; sourceTree = ""; }; 8FAB1B3419FE76780064F073 /* PersonFull.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PersonFull.m; sourceTree = ""; }; 8FAB1B3719FE77A40064F073 /* ModelObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelObject.h; sourceTree = ""; }; 8FAB1B3819FE77A40064F073 /* ModelObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelObject.m; sourceTree = ""; }; 8FAB1B3B19FE78B40064F073 /* Name.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Name.h; sourceTree = ""; }; 8FAB1B3C19FE78B40064F073 /* Name.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Name.m; sourceTree = ""; }; 8FAB1B3F19FE79F30064F073 /* TheaterShowtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TheaterShowtime.h; sourceTree = ""; }; 8FAB1B4019FE79F30064F073 /* TheaterShowtime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TheaterShowtime.m; sourceTree = ""; }; 8FAB1B4319FE7B080064F073 /* Place.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Place.h; sourceTree = ""; }; 8FAB1B4419FE7B080064F073 /* Place.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Place.m; sourceTree = ""; }; 8FAB1B4719FE7C090064F073 /* MovieShowtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MovieShowtime.h; sourceTree = ""; }; 8FAB1B4819FE7C090064F073 /* MovieShowtime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MovieShowtime.m; sourceTree = ""; }; 8FAB1B4B19FE7CEC0064F073 /* Version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Version.h; sourceTree = ""; }; 8FAB1B4C19FE7CEC0064F073 /* Version.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Version.m; sourceTree = ""; }; 8FAB1B4F19FE7D6A0064F073 /* OnShow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OnShow.h; sourceTree = ""; }; 8FAB1B5019FE7D6A0064F073 /* OnShow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OnShow.m; sourceTree = ""; }; 8FAB1B5319FE7DEC0064F073 /* Scr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Scr.h; sourceTree = ""; }; 8FAB1B5419FE7DEC0064F073 /* Scr.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Scr.m; sourceTree = ""; }; 8FAB1B5719FE87140064F073 /* Horaires.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Horaires.h; sourceTree = ""; }; 8FAB1B5819FE87140064F073 /* Horaires.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Horaires.m; sourceTree = ""; }; 8FAB1B5B19FE886A0064F073 /* Picture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Picture.h; sourceTree = ""; }; 8FAB1B5C19FE886A0064F073 /* Picture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Picture.m; sourceTree = ""; }; 8FAB1B5F19FE89410064F073 /* Geoloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Geoloc.h; sourceTree = ""; }; 8FAB1B6019FE89410064F073 /* Geoloc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Geoloc.m; sourceTree = ""; }; 8FAB1B6319FE8C0D0064F073 /* Media.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Media.h; sourceTree = ""; }; 8FAB1B6419FE8C0D0064F073 /* Media.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Media.m; sourceTree = ""; }; 8FAB1B6719FE8DF40064F073 /* Thumbnail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Thumbnail.h; sourceTree = ""; }; 8FAB1B6819FE8DF40064F073 /* Thumbnail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Thumbnail.m; sourceTree = ""; }; 8FAB1B6B19FE8EDA0064F073 /* Rendition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Rendition.h; sourceTree = ""; }; 8FAB1B6C19FE8EDA0064F073 /* Rendition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Rendition.m; sourceTree = ""; }; 8FAB1B6F19FE90150064F073 /* Publication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Publication.h; sourceTree = ""; }; 8FAB1B7019FE90150064F073 /* Publication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Publication.m; sourceTree = ""; }; 8FAB1B7319FE90BC0064F073 /* Statistics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Statistics.h; sourceTree = ""; }; 8FAB1B7419FE90BC0064F073 /* Statistics.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Statistics.m; sourceTree = ""; }; 8FAB1B7819FE92A80064F073 /* Link.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Link.h; sourceTree = ""; }; 8FAB1B7919FE92A80064F073 /* Link.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Link.m; sourceTree = ""; }; 8FAB1B7C19FE931B0064F073 /* Subject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Subject.h; sourceTree = ""; }; 8FAB1B7D19FE931B0064F073 /* Subject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Subject.m; sourceTree = ""; }; 8FAB1B8019FE93F20064F073 /* MovieType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MovieType.h; sourceTree = ""; }; 8FAB1B8119FE93F20064F073 /* MovieType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MovieType.m; sourceTree = ""; }; 8FAB1B8419FE94450064F073 /* DefaultMedia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultMedia.h; sourceTree = ""; }; 8FAB1B8519FE94450064F073 /* DefaultMedia.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DefaultMedia.m; sourceTree = ""; }; 8FAB1B8819FE95280064F073 /* Release.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Release.h; sourceTree = ""; }; 8FAB1B8919FE95280064F073 /* Release.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Release.m; sourceTree = ""; }; 8FAB1B8C19FE95E10064F073 /* Distributor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Distributor.h; sourceTree = ""; }; 8FAB1B8D19FE95E10064F073 /* Distributor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Distributor.m; sourceTree = ""; }; 8FAB1B9019FE965A0064F073 /* CastingShort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CastingShort.h; sourceTree = ""; }; 8FAB1B9119FE965A0064F073 /* CastingShort.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CastingShort.m; sourceTree = ""; }; 8FAB1B9419FE96CC0064F073 /* Trailer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Trailer.h; sourceTree = ""; }; 8FAB1B9519FE96CC0064F073 /* Trailer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Trailer.m; sourceTree = ""; }; 8FAB1B9819FE97290064F073 /* Poster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Poster.h; sourceTree = ""; }; 8FAB1B9919FE97290064F073 /* Poster.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Poster.m; sourceTree = ""; }; 8FAB1B9C19FE97700064F073 /* News.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = News.h; sourceTree = ""; }; 8FAB1B9D19FE97700064F073 /* News.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = News.m; sourceTree = ""; }; 8FAB1BA019FE987F0064F073 /* CastMember.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CastMember.h; sourceTree = ""; }; 8FAB1BA119FE987F0064F073 /* CastMember.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CastMember.m; sourceTree = ""; }; 8FAB1BA419FE99160064F073 /* PersonSmall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PersonSmall.h; sourceTree = ""; }; 8FAB1BA519FE99160064F073 /* PersonSmall.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PersonSmall.m; sourceTree = ""; }; 8FAB1BA819FE999F0064F073 /* Feature.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Feature.h; sourceTree = ""; }; 8FAB1BA919FE999F0064F073 /* Feature.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Feature.m; sourceTree = ""; }; 8FAB1BAC19FE9A390064F073 /* Trivium.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Trivium.h; sourceTree = ""; }; 8FAB1BAD19FE9A390064F073 /* Trivium.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Trivium.m; sourceTree = ""; }; 8FAB1BB019FE9A910064F073 /* HelpfulPositiveReview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HelpfulPositiveReview.h; sourceTree = ""; }; 8FAB1BB119FE9A910064F073 /* HelpfulPositiveReview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HelpfulPositiveReview.m; sourceTree = ""; }; 8FAB1BB419FE9AF90064F073 /* Writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Writer.h; sourceTree = ""; }; 8FAB1BB519FE9AF90064F073 /* Writer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Writer.m; sourceTree = ""; }; 8FAB1BB819FE9B530064F073 /* HelpfulNegativeReview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HelpfulNegativeReview.h; sourceTree = ""; }; 8FAB1BB919FE9B530064F073 /* HelpfulNegativeReview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HelpfulNegativeReview.m; sourceTree = ""; }; 8FAB1BBC19FE9BA10064F073 /* Review.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Review.h; sourceTree = ""; }; 8FAB1BBD19FE9BA10064F073 /* Review.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Review.m; sourceTree = ""; }; 8FAB1BC019FE9C630064F073 /* NewsSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewsSource.h; sourceTree = ""; }; 8FAB1BC119FE9C630064F073 /* NewsSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewsSource.m; sourceTree = ""; }; 8FAB1BC319FEA2800064F073 /* Protocole.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Protocole.h; sourceTree = ""; }; 8FB211551A48609500D40FA6 /* ic_version_white_2d.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_version_white_2d.png; sourceTree = ""; }; 8FB211561A48609500D40FA6 /* ic_version_white_3d.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_version_white_3d.png; sourceTree = ""; }; 8FB211571A48609500D40FA6 /* ic_version_white_vf.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_version_white_vf.png; sourceTree = ""; }; 8FB211581A48609500D40FA6 /* ic_version_white_vo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_version_white_vo.png; sourceTree = ""; }; 8FB2115E1A489D2200D40FA6 /* SlidingImageControllerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlidingImageControllerController.h; sourceTree = ""; }; 8FB2115F1A489D2200D40FA6 /* SlidingImageControllerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SlidingImageControllerController.m; sourceTree = ""; }; 8FB211621A49A14700D40FA6 /* OCRechercheSearchBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCRechercheSearchBarController.h; sourceTree = ""; }; 8FB211631A49A14700D40FA6 /* OCRechercheSearchBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCRechercheSearchBarController.m; sourceTree = ""; }; 8FB3AFB01A04FAAC0075FDD6 /* ic_cropped_crown.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_cropped_crown.png; sourceTree = ""; }; 8FB3AFB21A04FF850075FDD6 /* ic_drawer_credits.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_drawer_credits.png; sourceTree = ""; }; 8FB3AFB31A04FF850075FDD6 /* ic_drawer_favoris.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_drawer_favoris.png; sourceTree = ""; }; 8FB3AFB41A04FF850075FDD6 /* ic_drawer_films.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_drawer_films.png; sourceTree = ""; }; 8FB3AFB51A04FF850075FDD6 /* ic_drawer_salles.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_drawer_salles.png; sourceTree = ""; }; 8FB3AFB61A04FF850075FDD6 /* ic_drawer_stars.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_drawer_stars.png; sourceTree = ""; }; 8FB3AFBD1A051F8E0075FDD6 /* GTAppMenuController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTAppMenuController.h; sourceTree = ""; }; 8FB3AFBE1A051F8E0075FDD6 /* GTAppMenuController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTAppMenuController.m; sourceTree = ""; }; 8FB3AFC11A0524F20075FDD6 /* MovieDetailController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MovieDetailController.h; sourceTree = ""; }; 8FB3AFC21A0524F20075FDD6 /* MovieDetailController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MovieDetailController.m; sourceTree = ""; }; 8FC02E5119FBC0C900121F1A /* star_off_med.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = star_off_med.png; sourceTree = ""; }; 8FC02E5219FBC0C900121F1A /* star_on_med.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = star_on_med.png; sourceTree = ""; }; 8FC02E5519FBC70800121F1A /* star_off_small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = star_off_small.png; sourceTree = ""; }; 8FC02E5619FBC70800121F1A /* star_on_small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = star_on_small.png; sourceTree = ""; }; 8FC02E6019FBE16D00121F1A /* ServiceSecurity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServiceSecurity.h; sourceTree = ""; }; 8FC02E6119FBE16D00121F1A /* ServiceSecurity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ServiceSecurity.m; sourceTree = ""; }; 8FC02E6319FBEB8600121F1A /* AllocineService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AllocineService.h; sourceTree = ""; }; 8FC02E6419FBEB8600121F1A /* AllocineService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AllocineService.m; sourceTree = ""; }; 8FC889881A3624DC005873B2 /* long_shadow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = long_shadow.png; sourceTree = ""; }; 8FC8898B1A36271E005873B2 /* OCLoadTheaterMoviesTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCLoadTheaterMoviesTask.h; sourceTree = ""; }; 8FC8898C1A36271E005873B2 /* OCLoadTheaterMoviesTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCLoadTheaterMoviesTask.m; sourceTree = ""; }; E52C6C581A1F797500BF2A48 /* OCStarDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCStarDetailViewController.h; sourceTree = ""; }; E52C6C591A1F797500BF2A48 /* OCStarDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCStarDetailViewController.m; sourceTree = ""; }; E52F24D71A4B130400FE5C73 /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crashlytics.framework; sourceTree = ""; }; E52F24D81A4B130400FE5C73 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Fabric.framework; sourceTree = ""; }; E5945EBC1A541E3F0009C30F /* OCLoadShowTimesTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCLoadShowTimesTask.h; sourceTree = ""; }; E5945EBD1A541E5B0009C30F /* OCLoadShowTimesTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCLoadShowTimesTask.m; sourceTree = ""; }; E5945EC01A569C5F0009C30F /* OCMovieBandeAnnonceSliderElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMovieBandeAnnonceSliderElement.h; sourceTree = ""; }; E5945EC11A569C5F0009C30F /* OCMovieBandeAnnonceSliderElement.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCMovieBandeAnnonceSliderElement.m; sourceTree = ""; }; E5945EC31A56C6550009C30F /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; E5945EC51A56C8D30009C30F /* OCMovieDelegates.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OCMovieDelegates.h; sourceTree = ""; }; E5945EC61A56D32E0009C30F /* ic_version_white_2d.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_version_white_2d.png; sourceTree = ""; }; E5945EC71A56D32E0009C30F /* ic_version_white_3d.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_version_white_3d.png; sourceTree = ""; }; E5945EC81A56D32E0009C30F /* ic_version_white_vf.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_version_white_vf.png; sourceTree = ""; }; E5945EC91A56D32E0009C30F /* ic_version_white_vo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_version_white_vo.png; sourceTree = ""; }; E5945ECE1A56E13B0009C30F /* StarDetailDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StarDetailDelegate.h; sourceTree = ""; }; E5945ECF1A56F1380009C30F /* OCCreditsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCCreditsViewController.h; sourceTree = ""; }; E5945ED01A56F1380009C30F /* OCCreditsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCCreditsViewController.m; sourceTree = ""; }; E5945ED21A56F2860009C30F /* konami_flo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = konami_flo.png; sourceTree = ""; }; E5945ED31A56F2860009C30F /* konami_kevin.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = konami_kevin.png; sourceTree = ""; }; E5945ED41A56F2860009C30F /* konami_pooley.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = konami_pooley.png; sourceTree = ""; }; E5945ED81A56F2AD0009C30F /* ic_in_app_big.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_in_app_big.png; sourceTree = ""; }; E5945EDA1A56FDD70009C30F /* OCMovieDetailStarList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMovieDetailStarList.h; sourceTree = ""; }; E5945EDB1A56FDD70009C30F /* OCMovieDetailStarList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCMovieDetailStarList.m; sourceTree = ""; }; E5945EDD1A57005E0009C30F /* OCCastMember.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCCastMember.h; sourceTree = ""; }; E5945EDE1A57005E0009C30F /* OCCastMember.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCCastMember.m; sourceTree = ""; }; E5A20D6C1A482928001B3EE0 /* StarDetail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StarDetail.h; sourceTree = ""; }; E5A20D6D1A482928001B3EE0 /* StarDetail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StarDetail.m; sourceTree = ""; }; E5A20D701A482E8F001B3EE0 /* OCLoadPersonTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCLoadPersonTask.m; sourceTree = ""; }; E5A20D721A482E96001B3EE0 /* OCLoadPersonTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCLoadPersonTask.h; sourceTree = ""; }; E5A20D771A484551001B3EE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; E5A20D791A484F8F001B3EE0 /* DateUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateUtils.h; sourceTree = ""; }; E5A20D7A1A484F8F001B3EE0 /* DateUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DateUtils.m; sourceTree = ""; }; E5A20D7C1A4866AA001B3EE0 /* StarDetailPhotos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StarDetailPhotos.h; sourceTree = ""; }; E5A20D7D1A4866AA001B3EE0 /* StarDetailPhotos.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StarDetailPhotos.m; sourceTree = ""; }; E5A20D7F1A486982001B3EE0 /* plus_black.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = plus_black.png; sourceTree = ""; }; E5A20D801A486982001B3EE0 /* plus_dashed_photos_black.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = plus_dashed_photos_black.png; sourceTree = ""; }; E5A20D841A486C7F001B3EE0 /* OCStarPhoto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCStarPhoto.h; sourceTree = ""; }; E5A20D851A486C7F001B3EE0 /* OCStarPhoto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCStarPhoto.m; sourceTree = ""; }; E5A20D871A487563001B3EE0 /* filmo_reflet.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = filmo_reflet.png; sourceTree = ""; }; E5A20D891A487C65001B3EE0 /* OCFilmoGridLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCFilmoGridLayout.h; sourceTree = ""; }; E5A20D8A1A487C65001B3EE0 /* OCFilmoGridLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCFilmoGridLayout.m; sourceTree = ""; }; E5A20D8C1A487DC3001B3EE0 /* OCFilmoElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCFilmoElement.h; sourceTree = ""; }; E5A20D8D1A487DC3001B3EE0 /* OCFilmoElement.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCFilmoElement.m; sourceTree = ""; }; E5A413921A49C4160087E6F8 /* Participation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Participation.h; sourceTree = ""; }; E5A413931A49C4160087E6F8 /* Participation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Participation.m; sourceTree = ""; }; E5A62A391A5ACB76002F92CC /* OCHeaderVersionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCHeaderVersionView.h; sourceTree = ""; }; E5A62A3A1A5ACB76002F92CC /* OCHeaderVersionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCHeaderVersionView.m; sourceTree = ""; }; E5D1CD0D1A237F4B003C6B8F /* HeaderStarDetail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HeaderStarDetail.h; sourceTree = ""; }; E5D1CD0E1A237F4B003C6B8F /* HeaderStarDetail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HeaderStarDetail.m; sourceTree = ""; }; E5D1CD111A23820A003C6B8F /* OCDoubleController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCDoubleController.h; sourceTree = ""; }; E5D1CD121A23820A003C6B8F /* OCDoubleController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCDoubleController.m; sourceTree = ""; }; E5D1CD151A238501003C6B8F /* UIImage+Blur.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Blur.h"; sourceTree = ""; }; E5D1CD161A238501003C6B8F /* UIImage+Blur.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Blur.m"; sourceTree = ""; }; E5D1CD1C1A24886D003C6B8F /* OCListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCListViewController.h; sourceTree = ""; }; E5D1CD1D1A24886D003C6B8F /* OCListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCListViewController.m; sourceTree = ""; }; E5D1CD201A2490A7003C6B8F /* OCLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCLoader.h; sourceTree = ""; }; E5D1CD211A2490A7003C6B8F /* OCLoader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCLoader.m; sourceTree = ""; }; E5D5A4DD1A519500003079FD /* OCMovieViewPager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCMovieViewPager.m; sourceTree = ""; }; E5D5A4DF1A519506003079FD /* OCMovieViewPager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMovieViewPager.h; sourceTree = ""; }; E5D5A4E01A519FFC003079FD /* ic_filmo_30.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_filmo_30.png; sourceTree = ""; }; E5D5A4E11A519FFC003079FD /* ic_filmo_80.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_filmo_80.png; sourceTree = ""; }; E5D5A4E21A519FFC003079FD /* ic_picture2_30.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_picture2_30.png; sourceTree = ""; }; E5D5A4E31A519FFC003079FD /* ic_picture2_80.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_picture2_80.png; sourceTree = ""; }; E5D5A4E81A51A5C9003079FD /* OCStarFilmoGrid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCStarFilmoGrid.h; sourceTree = ""; }; E5D5A4E91A51A5C9003079FD /* OCStarFilmoGrid.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCStarFilmoGrid.m; sourceTree = ""; }; E5D5A4F51A52B5D0003079FD /* OCTheaterDetailMovieController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCTheaterDetailMovieController.h; sourceTree = ""; }; E5D5A4F61A52B5D0003079FD /* OCTheaterDetailMovieController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCTheaterDetailMovieController.m; sourceTree = ""; }; E5D5A4FA1A52B64E003079FD /* TheaterDetailMovieBackground.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TheaterDetailMovieBackground.h; sourceTree = ""; }; E5D5A4FB1A52B64E003079FD /* TheaterDetailMovieBackground.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TheaterDetailMovieBackground.m; sourceTree = ""; }; E5D5A4FD1A52B8B8003079FD /* cinema.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = cinema.png; sourceTree = ""; }; E5D5A4FE1A52B8B8003079FD /* curtain_left.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = curtain_left.png; sourceTree = ""; }; E5D5A4FF1A52B8B8003079FD /* curtain_right.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = curtain_right.png; sourceTree = ""; }; E5D5A5001A52B8B8003079FD /* curtain_sub_left.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = curtain_sub_left.png; sourceTree = ""; }; E5D5A5011A52B8B8003079FD /* curtain_sub_right.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = curtain_sub_right.png; sourceTree = ""; }; E5D5A5021A52B8B8003079FD /* seats.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = seats.png; sourceTree = ""; }; E5D5A5091A52D540003079FD /* TheaterDetailMovieForeground.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TheaterDetailMovieForeground.h; sourceTree = ""; }; E5D5A50A1A52D540003079FD /* TheaterDetailMovieForeground.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TheaterDetailMovieForeground.m; sourceTree = ""; }; E5D5A50C1A52D80F003079FD /* TheaterDetailMoviePageHoraires.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TheaterDetailMoviePageHoraires.h; sourceTree = ""; }; E5D5A50D1A52D80F003079FD /* TheaterDetailMoviePageHoraires.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TheaterDetailMoviePageHoraires.m; sourceTree = ""; }; E5D5A50F1A52E2F1003079FD /* ic_next.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_next.png; sourceTree = ""; }; E5D5A5101A52E2F1003079FD /* ic_prev.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_prev.png; sourceTree = ""; }; E5D5A5131A52E4AF003079FD /* CellTheaterHoraires.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CellTheaterHoraires.h; sourceTree = ""; }; E5D5A5141A52E4AF003079FD /* CellTheaterHoraires.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CellTheaterHoraires.m; sourceTree = ""; }; E5D5A5161A530D7E003079FD /* MovieDetailTheaterList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MovieDetailTheaterList.h; sourceTree = ""; }; E5D5A5171A530D7E003079FD /* MovieDetailTheaterList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MovieDetailTheaterList.m; sourceTree = ""; }; E5DA62121A4AECD200DBC4DA /* ViewPager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewPager.h; sourceTree = ""; }; E5DA62131A4AECD200DBC4DA /* ViewPager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewPager.m; sourceTree = ""; }; F85E46A0A457B0C7EF09749C /* OCStarViewPager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCStarViewPager.m; sourceTree = ""; }; F85E4DB69990A0E490E22AE9 /* OCStarViewPager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCStarViewPager.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 4AA1873C19F6D7CD00B91E25 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E5945EC41A56C6550009C30F /* MediaPlayer.framework in Frameworks */, 8F8EDB541A29FFFD00383D27 /* CoreLocation.framework in Frameworks */, E52F24DA1A4B130400FE5C73 /* Fabric.framework in Frameworks */, E52F24D91A4B130400FE5C73 /* Crashlytics.framework in Frameworks */, 8FAB1B2019FD030C0064F073 /* SystemConfiguration.framework in Frameworks */, 8FAB1B1E19FD02F70064F073 /* QuartzCore.framework in Frameworks */, 8FAB1B1C19FD02EB0064F073 /* Security.framework in Frameworks */, 4AA1874519F6D7CD00B91E25 /* CoreGraphics.framework in Frameworks */, 4AA1874719F6D7CD00B91E25 /* UIKit.framework in Frameworks */, 4AA1874319F6D7CD00B91E25 /* Foundation.framework in Frameworks */, 23F8042BDB86E09C6B51AB7B /* libPods-ociney.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 4AA1875D19F6D7CD00B91E25 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 4AA1876219F6D7CE00B91E25 /* XCTest.framework in Frameworks */, 4AA1876419F6D7CE00B91E25 /* UIKit.framework in Frameworks */, 4AA1876319F6D7CE00B91E25 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 0A6341AEDBAC6E1E4354EA52 /* Pods */ = { isa = PBXGroup; children = ( 5E1573FEA25E8FC98B424C02 /* Pods-ociney.debug.xcconfig */, 8C1B5404BD66A4D412BA7FBC /* Pods-ociney.release.xcconfig */, ); name = Pods; sourceTree = ""; }; 4AA1873619F6D7CD00B91E25 = { isa = PBXGroup; children = ( E52F24D71A4B130400FE5C73 /* Crashlytics.framework */, E52F24D81A4B130400FE5C73 /* Fabric.framework */, 4AA1874819F6D7CD00B91E25 /* ociney */, 4AA1876719F6D7CE00B91E25 /* ocineyTests */, 4AA1874119F6D7CD00B91E25 /* Frameworks */, 4AA1874019F6D7CD00B91E25 /* Products */, 0A6341AEDBAC6E1E4354EA52 /* Pods */, ); sourceTree = ""; }; 4AA1874019F6D7CD00B91E25 /* Products */ = { isa = PBXGroup; children = ( 4AA1873F19F6D7CD00B91E25 /* ociney.app */, 4AA1876019F6D7CD00B91E25 /* ocineyTests.xctest */, ); name = Products; sourceTree = ""; }; 4AA1874119F6D7CD00B91E25 /* Frameworks */ = { isa = PBXGroup; children = ( E5945EC31A56C6550009C30F /* MediaPlayer.framework */, 8F8EDB531A29FFFD00383D27 /* CoreLocation.framework */, 8FAB1B1F19FD030C0064F073 /* SystemConfiguration.framework */, 8FAB1B1D19FD02F70064F073 /* QuartzCore.framework */, 8FAB1B1B19FD02EB0064F073 /* Security.framework */, 4AA1874219F6D7CD00B91E25 /* Foundation.framework */, 4AA1874419F6D7CD00B91E25 /* CoreGraphics.framework */, 4AA1874619F6D7CD00B91E25 /* UIKit.framework */, 4AA1876119F6D7CD00B91E25 /* XCTest.framework */, 8117E5A1CB1AF729DD43F835 /* libPods-ociney.a */, ); name = Frameworks; sourceTree = ""; }; 4AA1874819F6D7CD00B91E25 /* ociney */ = { isa = PBXGroup; children = ( 4AA1875A19F6D7CD00B91E25 /* Images.xcassets */, 8F76035C19FA6DF800E9A9B9 /* libs */, 4AA1875119F6D7CD00B91E25 /* OCAppDelegate.h */, 4AA1875219F6D7CD00B91E25 /* OCAppDelegate.m */, 4AA1877E19F6E06B00B91E25 /* res */, 4AA1877719F6D7FC00B91E25 /* src */, 4AA1874919F6D7CD00B91E25 /* Supporting Files */, ); path = ociney; sourceTree = ""; }; 4AA1874919F6D7CD00B91E25 /* Supporting Files */ = { isa = PBXGroup; children = ( 4AA1874A19F6D7CD00B91E25 /* ociney-Info.plist */, 4AA1874B19F6D7CD00B91E25 /* InfoPlist.strings */, 4AA1874E19F6D7CD00B91E25 /* main.m */, 4AA1875019F6D7CD00B91E25 /* ociney-Prefix.pch */, ); name = "Supporting Files"; sourceTree = ""; }; 4AA1876719F6D7CE00B91E25 /* ocineyTests */ = { isa = PBXGroup; children = ( 4AA1876D19F6D7CE00B91E25 /* ocineyTests.m */, 4AA1876819F6D7CE00B91E25 /* Supporting Files */, ); path = ocineyTests; sourceTree = ""; }; 4AA1876819F6D7CE00B91E25 /* Supporting Files */ = { isa = PBXGroup; children = ( 4AA1876919F6D7CE00B91E25 /* ocineyTests-Info.plist */, 4AA1876A19F6D7CE00B91E25 /* InfoPlist.strings */, ); name = "Supporting Files"; sourceTree = ""; }; 4AA1877719F6D7FC00B91E25 /* src */ = { isa = PBXGroup; children = ( 4AA1877819F6D81600B91E25 /* Controller */, 8FAB1B2119FE64660064F073 /* Modele */, 8FC02E5919FBDA5200121F1A /* Service */, 8FAB1B1219FCFAAE0064F073 /* Task */, 4AA1877919F6D9C000B91E25 /* Utils */, 8F76036619FA86AB00E9A9B9 /* View */, ); path = src; sourceTree = ""; }; 4AA1877819F6D81600B91E25 /* Controller */ = { isa = PBXGroup; children = ( 8F547A3C1A57545900D79E8A /* Credits */, E5D1CD1B1A248837003C6B8F /* core */, E52C6C5B1A1F84A800BF2A48 /* DetailStar */, 8FB3AFC01A05249C0075FDD6 /* DetailMovie */, 8F76038119FAA49D00E9A9B9 /* LeftDrawer */, 8F76036219FA6E6000E9A9B9 /* ListMovieController */, 8F8EDB471A29F16300383D27 /* ListSallesController */, 8F35FF871A0113C000C4F6D8 /* ListStarController */, 8FA8C0091A31DE2600ABE716 /* PosterController */, 8FB211611A49A10600D40FA6 /* RechercheSearchBarController */, 8FB2115D1A489D0100D40FA6 /* SlidingImageController */, 8F76036119FA6E4A00E9A9B9 /* SplashScreen */, 8F310D051A2E1367002618B1 /* TheaterDetailController */, E5D5A4F81A52B5F2003079FD /* ThreaderDetailMovie */, ); path = Controller; sourceTree = ""; }; 4AA1877919F6D9C000B91E25 /* Utils */ = { isa = PBXGroup; children = ( 4AA1877D19F6DEA600B91E25 /* Constantes.h */, 4AA1877A19F6DE8200B91E25 /* Color+Hex.h */, 4AA1877B19F6DE8200B91E25 /* Color+Hex.m */, E5D1CD151A238501003C6B8F /* UIImage+Blur.h */, E5D1CD161A238501003C6B8F /* UIImage+Blur.m */, E5A20D791A484F8F001B3EE0 /* DateUtils.h */, E5A20D7A1A484F8F001B3EE0 /* DateUtils.m */, ); path = Utils; sourceTree = ""; }; 4AA1877E19F6E06B00B91E25 /* res */ = { isa = PBXGroup; children = ( 4AA1877F19F6E06B00B91E25 /* drawable */, E5A20D781A484551001B3EE0 /* Localizable.strings */, ); path = res; sourceTree = ""; }; 4AA1877F19F6E06B00B91E25 /* drawable */ = { isa = PBXGroup; children = ( 8F547A3D1A57F7D600D79E8A /* arrow.png */, E5945ED81A56F2AD0009C30F /* ic_in_app_big.png */, E5945ED21A56F2860009C30F /* konami_flo.png */, E5945ED31A56F2860009C30F /* konami_kevin.png */, E5945ED41A56F2860009C30F /* konami_pooley.png */, E5945EC61A56D32E0009C30F /* ic_version_white_2d.png */, E5945EC71A56D32E0009C30F /* ic_version_white_3d.png */, E5945EC81A56D32E0009C30F /* ic_version_white_vf.png */, E5945EC91A56D32E0009C30F /* ic_version_white_vo.png */, 8F547A2D1A54674400D79E8A /* pellicule.png */, 8F547A201A5440FE00D79E8A /* ic_picture_30.png */, 8F547A211A5440FE00D79E8A /* ic_picture_80.png */, 8F547A221A5440FE00D79E8A /* ic_picture.png */, 8F547A1A1A5440F300D79E8A /* ic_bandeannonce_30.png */, 8F547A1B1A5440F300D79E8A /* ic_bandeannonce_80.png */, 8F547A1C1A5440F300D79E8A /* ic_bandeannonce.png */, 8F310D091A2E1F4E002618B1 /* charniere.png */, E5D5A4FD1A52B8B8003079FD /* cinema.png */, E5D5A4FE1A52B8B8003079FD /* curtain_left.png */, E5D5A4FF1A52B8B8003079FD /* curtain_right.png */, E5D5A5001A52B8B8003079FD /* curtain_sub_left.png */, E5D5A5011A52B8B8003079FD /* curtain_sub_right.png */, E5A20D871A487563001B3EE0 /* filmo_reflet.png */, 8FA8BFF21A307D7200ABE716 /* folded_effect.png */, 8F750E191A1CEC7300D9733B /* ic_action_search.png */, 8FB3AFB01A04FAAC0075FDD6 /* ic_cropped_crown.png */, 8FB3AFB21A04FF850075FDD6 /* ic_drawer_credits.png */, 8FB3AFB31A04FF850075FDD6 /* ic_drawer_favoris.png */, 8FB3AFB41A04FF850075FDD6 /* ic_drawer_films.png */, 8FB3AFB51A04FF850075FDD6 /* ic_drawer_salles.png */, 8FB3AFB61A04FF850075FDD6 /* ic_drawer_stars.png */, E5D5A4E01A519FFC003079FD /* ic_filmo_30.png */, E5D5A4E11A519FFC003079FD /* ic_filmo_80.png */, 4AA1878219F6ED4700B91E25 /* ic_glass_reflect_color_big.png */, 8F8EDB5B1A2A235300383D27 /* ic_handicap_skew.png */, 8F8EDB5D1A2A31D700383D27 /* ic_nav.png */, E5D5A50F1A52E2F1003079FD /* ic_next.png */, E5D5A4E21A519FFC003079FD /* ic_picture2_30.png */, E5D5A4E31A519FFC003079FD /* ic_picture2_80.png */, 8F35FF991A01311D00C4F6D8 /* ic_placeholder_people.png */, E5D5A5101A52E2F1003079FD /* ic_prev.png */, 8F35FF9B1A01441000C4F6D8 /* ic_topstar_1.png */, 8F35FF9D1A0159BE00C4F6D8 /* ic_topstar_2.png */, 8F35FF9E1A0159BE00C4F6D8 /* ic_topstar_3.png */, 4AA1878319F6ED4700B91E25 /* ic_txt_ociney.png */, 8FB211551A48609500D40FA6 /* ic_version_white_2d.png */, 8FB211561A48609500D40FA6 /* ic_version_white_3d.png */, 8FB211571A48609500D40FA6 /* ic_version_white_vf.png */, 8FB211581A48609500D40FA6 /* ic_version_white_vo.png */, 8F8EDB5F1A2A3C8C00383D27 /* logo_cgr.png */, 8F8EDB601A2A3C8C00383D27 /* logo_cineville.png */, 8F8EDB571A2A18DE00383D27 /* logo_default.png */, 8F8EDB611A2A3C8C00383D27 /* logo_gaumont_pathe.png */, 8F8EDB621A2A3C8C00383D27 /* logo_gaumont.png */, 8F8EDB631A2A3C8C00383D27 /* logo_kinepolis.png */, 8F8EDB641A2A3C8C00383D27 /* logo_megarama.png */, 8F8EDB651A2A3C8C00383D27 /* logo_mk2.png */, 8F8EDB661A2A3C8C00383D27 /* logo_pathe.png */, 8F8EDB671A2A3C8C00383D27 /* logo_ugc.png */, 8FC889881A3624DC005873B2 /* long_shadow.png */, 8F76038519FAA5AD00E9A9B9 /* menu.png */, E5A20D7F1A486982001B3EE0 /* plus_black.png */, E5A20D801A486982001B3EE0 /* plus_dashed_photos_black.png */, 8F8F87341A14FC99008DABC2 /* plus_dashed_photos_white.png */, 8F8F87321A14FC90008DABC2 /* plus_white.png */, 8F8EDB591A2A21A500383D27 /* porte.png */, 8FA8BFF41A30833800ABE716 /* reflet_framewood.png */, 8F750E1B1A1E6B7200D9733B /* search-25.png */, E5D5A5021A52B8B8003079FD /* seats.png */, 8F310D0A1A2E1F4E002618B1 /* serrure.png */, 4AA1878019F6E06B00B91E25 /* splash_motif_stripes_black.png */, 8FC02E5119FBC0C900121F1A /* star_off_med.png */, 8FC02E5519FBC70800121F1A /* star_off_small.png */, 8FC02E5219FBC0C900121F1A /* star_on_med.png */, 8F547A2F1A54774300D79E8A /* play.png */, 8FC02E5619FBC70800121F1A /* star_on_small.png */, 8F310D0B1A2E1F4E002618B1 /* wood_frame.png */, 4AA1878619F6F06600B91E25 /* ic_drawer_films.png */, ); path = drawable; sourceTree = ""; }; 8F2537251A079A3D00D88B7D /* HeaderMovieDetail */ = { isa = PBXGroup; children = ( 8F2537261A079A7100D88B7D /* HeaderMovieDetail.h */, 8F2537271A079A7100D88B7D /* HeaderMovieDetail.m */, E5A62A391A5ACB76002F92CC /* OCHeaderVersionView.h */, E5A62A3A1A5ACB76002F92CC /* OCHeaderVersionView.m */, ); name = HeaderMovieDetail; sourceTree = ""; }; 8F25372A1A07FF1000D88B7D /* MovieDetailContent */ = { isa = PBXGroup; children = ( E5D5A4DD1A519500003079FD /* OCMovieViewPager.m */, E5D5A4DF1A519506003079FD /* OCMovieViewPager.h */, 8F25372B1A07FF2500D88B7D /* MovieDetailContent.h */, 8F25372C1A07FF2500D88B7D /* MovieDetailContent.m */, E5D5A5161A530D7E003079FD /* MovieDetailTheaterList.h */, E5D5A5171A530D7E003079FD /* MovieDetailTheaterList.m */, 8F547A2A1A5453EA00D79E8A /* OCMovieBandeAnnonceSlider.h */, 8F547A2B1A5453EA00D79E8A /* OCMovieBandeAnnonceSlider.m */, E5945EC01A569C5F0009C30F /* OCMovieBandeAnnonceSliderElement.h */, E5945EC11A569C5F0009C30F /* OCMovieBandeAnnonceSliderElement.m */, E5945EC51A56C8D30009C30F /* OCMovieDelegates.h */, E5945EDA1A56FDD70009C30F /* OCMovieDetailStarList.h */, E5945EDB1A56FDD70009C30F /* OCMovieDetailStarList.m */, E5945EDD1A57005E0009C30F /* OCCastMember.h */, E5945EDE1A57005E0009C30F /* OCCastMember.m */, ); name = MovieDetailContent; sourceTree = ""; }; 8F25373A1A0A220700D88B7D /* LoadMovieFullTask */ = { isa = PBXGroup; children = ( 8F25373B1A0A221E00D88B7D /* LoadMovieFullTask.h */, 8F25373C1A0A221E00D88B7D /* LoadMovieFullTask.m */, ); name = LoadMovieFullTask; sourceTree = ""; }; 8F310D011A2DEE7A002618B1 /* RechercheTaskTheater */ = { isa = PBXGroup; children = ( 8F310D021A2DEEA2002618B1 /* RechercheTaskTheater.h */, 8F310D031A2DEEA2002618B1 /* RechercheTaskTheater.m */, ); name = RechercheTaskTheater; sourceTree = ""; }; 8F310D051A2E1367002618B1 /* TheaterDetailController */ = { isa = PBXGroup; children = ( 8F310D061A2E1399002618B1 /* OCTheaterDetailController.h */, 8F310D071A2E1399002618B1 /* OCTheaterDetailController.m */, ); name = TheaterDetailController; sourceTree = ""; }; 8F310D0F1A2E27C8002618B1 /* Poster */ = { isa = PBXGroup; children = ( 8F310D101A2E27DB002618B1 /* PosterView.h */, 8F310D111A2E27DB002618B1 /* PosterView.m */, ); name = Poster; sourceTree = ""; }; 8F35FF871A0113C000C4F6D8 /* ListStarController */ = { isa = PBXGroup; children = ( 8F35FF881A0113E000C4F6D8 /* OCStarListController.h */, 8F35FF891A0113E000C4F6D8 /* OCStarListController.m */, ); name = ListStarController; sourceTree = ""; }; 8F35FF8B1A0114FE00C4F6D8 /* LoadStarsTask */ = { isa = PBXGroup; children = ( 8F35FF8C1A01152300C4F6D8 /* OCLoadStarsTask.h */, 8F35FF8D1A01152300C4F6D8 /* OCLoadStarsTask.m */, ); name = LoadStarsTask; sourceTree = ""; }; 8F35FF8F1A01197F00C4F6D8 /* Person */ = { isa = PBXGroup; children = ( 8F35FF901A01199000C4F6D8 /* Person.h */, 8F35FF911A01199000C4F6D8 /* Person.m */, ); name = Person; sourceTree = ""; }; 8F35FF931A011E6D00C4F6D8 /* StarCell */ = { isa = PBXGroup; children = ( 8F35FF941A011EBB00C4F6D8 /* OCStarCell.h */, 8F35FF951A011EBB00C4F6D8 /* OCStarCell.m */, 8F35FF961A011EBB00C4F6D8 /* OCStarCell.xib */, ); name = StarCell; sourceTree = ""; }; 8F547A261A5445E700D79E8A /* LoadBandeAnnonceFilmTask */ = { isa = PBXGroup; children = ( 8F547A271A54461300D79E8A /* LoadBandeAnnonceFilmTask.h */, 8F547A281A54461300D79E8A /* LoadBandeAnnonceFilmTask.m */, ); name = LoadBandeAnnonceFilmTask; sourceTree = ""; }; 8F547A311A5737C100D79E8A /* RechercheTaskStar */ = { isa = PBXGroup; children = ( 8F547A321A57381A00D79E8A /* RechercheTaskStar.h */, 8F547A331A57381A00D79E8A /* RechercheTaskStar.m */, ); name = RechercheTaskStar; sourceTree = ""; }; 8F547A381A5740BD00D79E8A /* FeedSmall */ = { isa = PBXGroup; children = ( 8F547A391A5740EB00D79E8A /* FeedSmall.h */, 8F547A3A1A5740EB00D79E8A /* FeedSmall.m */, ); name = FeedSmall; path = ../Controller; sourceTree = ""; }; 8F547A3C1A57545900D79E8A /* Credits */ = { isa = PBXGroup; children = ( E5945ECF1A56F1380009C30F /* OCCreditsViewController.h */, E5945ED01A56F1380009C30F /* OCCreditsViewController.m */, ); name = Credits; sourceTree = ""; }; 8F547A3F1A57FC9F00D79E8A /* EmptyView */ = { isa = PBXGroup; children = ( 8F547A401A57FCB600D79E8A /* OCEmptyView.h */, 8F547A411A57FCB600D79E8A /* OCEmptyView.m */, ); name = EmptyView; sourceTree = ""; }; 8F547A431A58080400D79E8A /* EmptyViewGPS */ = { isa = PBXGroup; children = ( 8F547A441A58081B00D79E8A /* OCEmptyViewGPS.h */, 8F547A451A58081B00D79E8A /* OCEmptyViewGPS.m */, ); name = EmptyViewGPS; sourceTree = ""; }; 8F76035C19FA6DF800E9A9B9 /* libs */ = { isa = PBXGroup; children = ( 8FB3AFBC1A051F8E0075FDD6 /* GTAppMenuController */, 8F76036E19FAA37700E9A9B9 /* SliddingController */, ); path = libs; sourceTree = ""; }; 8F76036119FA6E4A00E9A9B9 /* SplashScreen */ = { isa = PBXGroup; children = ( 4AA1875719F6D7CD00B91E25 /* OCSplashViewController.h */, 4AA1875819F6D7CD00B91E25 /* OCSplashViewController.m */, ); name = SplashScreen; sourceTree = ""; }; 8F76036219FA6E6000E9A9B9 /* ListMovieController */ = { isa = PBXGroup; children = ( 8F76036319FA6ED000E9A9B9 /* OCListMovieViewController.h */, 8F76036419FA6ED000E9A9B9 /* OCListMovieViewController.m */, ); name = ListMovieController; sourceTree = ""; }; 8F76036619FA86AB00E9A9B9 /* View */ = { isa = PBXGroup; children = ( 8F547A431A58080400D79E8A /* EmptyViewGPS */, 8F547A3F1A57FC9F00D79E8A /* EmptyView */, 8F76036719FA86AB00E9A9B9 /* cell */, 8F2537251A079A3D00D88B7D /* HeaderMovieDetail */, E5D1CD101A237F4E003C6B8F /* HeaderStarDetail */, E5D5FF451A24B46500B9B6C5 /* Loader */, 8F25372A1A07FF1000D88B7D /* MovieDetailContent */, 8F310D0F1A2E27C8002618B1 /* Poster */, E5A20D6F1A4829B3001B3EE0 /* StarDetail */, E5D5A4F91A52B619003079FD /* TheaderDetailMovie */, E5DA62121A4AECD200DBC4DA /* ViewPager.h */, E5DA62131A4AECD200DBC4DA /* ViewPager.m */, ); path = View; sourceTree = ""; }; 8F76036719FA86AB00E9A9B9 /* cell */ = { isa = PBXGroup; children = ( 8F8EDB4B1A29F38B00383D27 /* SalleCell */, 8F35FF931A011E6D00C4F6D8 /* StarCell */, 8F76036819FA86F100E9A9B9 /* MovieCell */, ); path = cell; sourceTree = ""; }; 8F76036819FA86F100E9A9B9 /* MovieCell */ = { isa = PBXGroup; children = ( 8F76036919FA871200E9A9B9 /* OCMovieCell.h */, 8F76036A19FA871200E9A9B9 /* OCMovieCell.m */, 8F76036C19FA895B00E9A9B9 /* OCMovieCell.xib */, ); name = MovieCell; sourceTree = ""; }; 8F76036E19FAA37700E9A9B9 /* SliddingController */ = { isa = PBXGroup; children = ( 8F76036F19FAA37700E9A9B9 /* TTBlackTriangle.h */, 8F76037019FAA37700E9A9B9 /* TTBlackTriangle.m */, 8F76037119FAA37700E9A9B9 /* TTScrollSlidingPagesController.h */, 8F76037219FAA37700E9A9B9 /* TTScrollSlidingPagesController.m */, 8F76037319FAA37700E9A9B9 /* TTScrollViewWrapper.h */, 8F76037419FAA37700E9A9B9 /* TTScrollViewWrapper.m */, 8F76037519FAA37700E9A9B9 /* TTSliddingPageDelegate.h */, 8F76037619FAA37700E9A9B9 /* TTSlidingPage.h */, 8F76037719FAA37700E9A9B9 /* TTSlidingPage.m */, 8F76037819FAA37700E9A9B9 /* TTSlidingPagesDataSource.h */, 8F76037919FAA37700E9A9B9 /* TTSlidingPageTitle.h */, 8F76037A19FAA37700E9A9B9 /* TTSlidingPageTitle.m */, 8F76037B19FAA37700E9A9B9 /* TTUIScrollViewSlidingPages.h */, ); path = SliddingController; sourceTree = ""; }; 8F76038119FAA49D00E9A9B9 /* LeftDrawer */ = { isa = PBXGroup; children = ( 8F76038219FAA4B800E9A9B9 /* LeftViewController.h */, 8F76038319FAA4B800E9A9B9 /* LeftViewController.m */, ); name = LeftDrawer; sourceTree = ""; }; 8F8EDB471A29F16300383D27 /* ListSallesController */ = { isa = PBXGroup; children = ( 8F8EDB481A29F1AD00383D27 /* ListSallesController.h */, 8F8EDB491A29F1AD00383D27 /* ListSallesController.m */, ); name = ListSallesController; sourceTree = ""; }; 8F8EDB4B1A29F38B00383D27 /* SalleCell */ = { isa = PBXGroup; children = ( 8F8EDB551A2A144C00383D27 /* SalleCell.xib */, 8F8EDB4C1A29F3AF00383D27 /* SalleCell.h */, 8F8EDB4D1A29F3AF00383D27 /* SalleCell.m */, ); name = SalleCell; sourceTree = ""; }; 8F8EDB4F1A29F70600383D27 /* LoadTheatersTask */ = { isa = PBXGroup; children = ( 8F8EDB501A29F72700383D27 /* OCLoadTheatersTask.h */, 8F8EDB511A29F72700383D27 /* OCLoadTheatersTask.m */, ); name = LoadTheatersTask; sourceTree = ""; }; 8FA166BD1A1F5F84005D4F03 /* RechercheTask */ = { isa = PBXGroup; children = ( 8F547A311A5737C100D79E8A /* RechercheTaskStar */, 8F310D011A2DEE7A002618B1 /* RechercheTaskTheater */, 8FA166C11A1F6064005D4F03 /* RechercheTaskMovie */, 8FA166BE1A1F5FA2005D4F03 /* RechercheTask.h */, 8FA166BF1A1F5FA2005D4F03 /* RechercheTask.m */, ); name = RechercheTask; sourceTree = ""; }; 8FA166C11A1F6064005D4F03 /* RechercheTaskMovie */ = { isa = PBXGroup; children = ( 8FA166C21A1F6079005D4F03 /* RechercheTaskMovie.h */, 8FA166C31A1F6079005D4F03 /* RechercheTaskMovie.m */, ); name = RechercheTaskMovie; sourceTree = ""; }; 8FA8C0091A31DE2600ABE716 /* PosterController */ = { isa = PBXGroup; children = ( 8FA8C00A1A31DE4A00ABE716 /* OCPosterController.h */, 8FA8C00B1A31DE4A00ABE716 /* OCPosterController.m */, ); name = PosterController; sourceTree = ""; }; 8FAB1B1219FCFAAE0064F073 /* Task */ = { isa = PBXGroup; children = ( 8F547A261A5445E700D79E8A /* LoadBandeAnnonceFilmTask */, E5945EBF1A541EB20009C30F /* LoadShowTimesTask */, E5A20D731A482E9B001B3EE0 /* LoadPersonTask */, 8FC8898A1A362709005873B2 /* LoadTheaterMoviesTask */, 8F8EDB4F1A29F70600383D27 /* LoadTheatersTask */, 8FA166BD1A1F5F84005D4F03 /* RechercheTask */, 8F25373A1A0A220700D88B7D /* LoadMovieFullTask */, 8F35FF8B1A0114FE00C4F6D8 /* LoadStarsTask */, 8FAB1B1719FCFAEA0064F073 /* LoadMoviesTask */, 8FAB1B1619FCFABA0064F073 /* AsyncTask */, ); path = Task; sourceTree = ""; }; 8FAB1B1619FCFABA0064F073 /* AsyncTask */ = { isa = PBXGroup; children = ( 8FAB1B1319FCFAAE0064F073 /* AsyncTask.h */, 8FAB1B1419FCFAAE0064F073 /* AsyncTask.m */, ); name = AsyncTask; sourceTree = ""; }; 8FAB1B1719FCFAEA0064F073 /* LoadMoviesTask */ = { isa = PBXGroup; children = ( 8FAB1B1819FCFB810064F073 /* OCLoadMoviesTask.h */, 8FAB1B1919FCFB810064F073 /* OCLoadMoviesTask.m */, ); name = LoadMoviesTask; sourceTree = ""; }; 8FAB1B2119FE64660064F073 /* Modele */ = { isa = PBXGroup; children = ( 8F547A381A5740BD00D79E8A /* FeedSmall */, 8FAB1B2219FE64930064F073 /* AllocineResponse */, 8FAB1B8F19FE964E0064F073 /* CastingShort */, 8FAB1B9F19FE98730064F073 /* CastMember */, 8FAB1B8319FE94340064F073 /* DefaultMedia */, 8FAB1B8B19FE95D80064F073 /* Distributor */, 8FAB1BA719FE99950064F073 /* Feature */, 8FAB1B2619FE657D0064F073 /* Feed */, 8FAB1B5E19FE89270064F073 /* Geoloc */, 8FAB1BB719FE9B4B0064F073 /* HelpfulNegativeReview */, 8FAB1BAF19FE9A890064F073 /* HelpfulPositiveReview */, 8FAB1B5619FE86F00064F073 /* Horaires */, 8FAB1B7719FE929F0064F073 /* Link */, 8FAB1B6219FE8BF60064F073 /* Media */, 8FAB1B3619FE77890064F073 /* ModelObject */, 8FAB1B2A19FE672E0064F073 /* Movie */, 8FAB1B4619FE7BFB0064F073 /* MovieShowtime */, 8FAB1B7F19FE93E60064F073 /* MovieType */, 8FAB1B3A19FE788D0064F073 /* Name */, 8FAB1B9B19FE97670064F073 /* News */, 8FAB1BBF19FE9C5B0064F073 /* NewsSource */, 8FAB1B4E19FE7D600064F073 /* OnShow */, E5A413921A49C4160087E6F8 /* Participation.h */, E5A413931A49C4160087E6F8 /* Participation.m */, 8F35FF8F1A01197F00C4F6D8 /* Person */, 8FAB1B3219FE765F0064F073 /* PersonFull */, 8FAB1BA319FE99030064F073 /* PersonSmall */, 8FAB1B5A19FE88550064F073 /* Picture */, 8FAB1B4219FE7AF90064F073 /* Place */, 8FAB1B9719FE971D0064F073 /* Poster */, 8FAB1BC319FEA2800064F073 /* Protocole.h */, 8FAB1B6E19FE90080064F073 /* Publication */, 8FAB1B8719FE951D0064F073 /* Release */, 8FAB1B6A19FE8EC00064F073 /* Rendition */, 8FAB1BBB19FE9B9A0064F073 /* Review */, 8FAB1B5219FE7DCD0064F073 /* Scr */, 8FAB1B7219FE90AE0064F073 /* Statistics */, 8FAB1B7B19FE93100064F073 /* Subject */, 8FAB1B2E19FE6CDB0064F073 /* Theater */, 8FAB1B3E19FE79A20064F073 /* TheaterShowtime */, 8FAB1B6619FE8DE20064F073 /* Thumbnail */, 8FAB1B9319FE96C00064F073 /* Trailer */, 8FAB1BAB19FE9A2F0064F073 /* Trivium */, 8FAB1B4A19FE7CE30064F073 /* Version */, 8FAB1BB319FE9AF20064F073 /* Writer */, 8F547A351A57400900D79E8A /* AllocineResponseSmall.h */, 8F547A361A57400900D79E8A /* AllocineResponseSmall.m */, ); path = Modele; sourceTree = ""; }; 8FAB1B2219FE64930064F073 /* AllocineResponse */ = { isa = PBXGroup; children = ( 8FAB1B2319FE64A80064F073 /* AllocineResponse.h */, 8FAB1B2419FE64A80064F073 /* AllocineResponse.m */, ); name = AllocineResponse; sourceTree = ""; }; 8FAB1B2619FE657D0064F073 /* Feed */ = { isa = PBXGroup; children = ( 8FAB1B2719FE658B0064F073 /* Feed.h */, 8FAB1B2819FE658B0064F073 /* Feed.m */, ); name = Feed; sourceTree = ""; }; 8FAB1B2A19FE672E0064F073 /* Movie */ = { isa = PBXGroup; children = ( 8FAB1B2B19FE673C0064F073 /* Movie.h */, 8FAB1B2C19FE673C0064F073 /* Movie.m */, ); name = Movie; sourceTree = ""; }; 8FAB1B2E19FE6CDB0064F073 /* Theater */ = { isa = PBXGroup; children = ( 8FAB1B2F19FE6CE90064F073 /* Theater.h */, 8FAB1B3019FE6CE90064F073 /* Theater.m */, ); name = Theater; sourceTree = ""; }; 8FAB1B3219FE765F0064F073 /* PersonFull */ = { isa = PBXGroup; children = ( 8FAB1B3319FE76780064F073 /* PersonFull.h */, 8FAB1B3419FE76780064F073 /* PersonFull.m */, ); name = PersonFull; sourceTree = ""; }; 8FAB1B3619FE77890064F073 /* ModelObject */ = { isa = PBXGroup; children = ( 8FAB1B3719FE77A40064F073 /* ModelObject.h */, 8FAB1B3819FE77A40064F073 /* ModelObject.m */, ); name = ModelObject; sourceTree = ""; }; 8FAB1B3A19FE788D0064F073 /* Name */ = { isa = PBXGroup; children = ( 8FAB1B3B19FE78B40064F073 /* Name.h */, 8FAB1B3C19FE78B40064F073 /* Name.m */, ); name = Name; sourceTree = ""; }; 8FAB1B3E19FE79A20064F073 /* TheaterShowtime */ = { isa = PBXGroup; children = ( 8FAB1B3F19FE79F30064F073 /* TheaterShowtime.h */, 8FAB1B4019FE79F30064F073 /* TheaterShowtime.m */, ); name = TheaterShowtime; sourceTree = ""; }; 8FAB1B4219FE7AF90064F073 /* Place */ = { isa = PBXGroup; children = ( 8FAB1B4319FE7B080064F073 /* Place.h */, 8FAB1B4419FE7B080064F073 /* Place.m */, ); name = Place; sourceTree = ""; }; 8FAB1B4619FE7BFB0064F073 /* MovieShowtime */ = { isa = PBXGroup; children = ( 8FAB1B4719FE7C090064F073 /* MovieShowtime.h */, 8FAB1B4819FE7C090064F073 /* MovieShowtime.m */, ); name = MovieShowtime; sourceTree = ""; }; 8FAB1B4A19FE7CE30064F073 /* Version */ = { isa = PBXGroup; children = ( 8FAB1B4B19FE7CEC0064F073 /* Version.h */, 8FAB1B4C19FE7CEC0064F073 /* Version.m */, ); name = Version; sourceTree = ""; }; 8FAB1B4E19FE7D600064F073 /* OnShow */ = { isa = PBXGroup; children = ( 8FAB1B4F19FE7D6A0064F073 /* OnShow.h */, 8FAB1B5019FE7D6A0064F073 /* OnShow.m */, ); name = OnShow; sourceTree = ""; }; 8FAB1B5219FE7DCD0064F073 /* Scr */ = { isa = PBXGroup; children = ( 8FAB1B5319FE7DEC0064F073 /* Scr.h */, 8FAB1B5419FE7DEC0064F073 /* Scr.m */, ); name = Scr; sourceTree = ""; }; 8FAB1B5619FE86F00064F073 /* Horaires */ = { isa = PBXGroup; children = ( 8FAB1B5719FE87140064F073 /* Horaires.h */, 8FAB1B5819FE87140064F073 /* Horaires.m */, ); name = Horaires; sourceTree = ""; }; 8FAB1B5A19FE88550064F073 /* Picture */ = { isa = PBXGroup; children = ( 8FAB1B5B19FE886A0064F073 /* Picture.h */, 8FAB1B5C19FE886A0064F073 /* Picture.m */, ); name = Picture; sourceTree = ""; }; 8FAB1B5E19FE89270064F073 /* Geoloc */ = { isa = PBXGroup; children = ( 8FAB1B5F19FE89410064F073 /* Geoloc.h */, 8FAB1B6019FE89410064F073 /* Geoloc.m */, ); name = Geoloc; sourceTree = ""; }; 8FAB1B6219FE8BF60064F073 /* Media */ = { isa = PBXGroup; children = ( 8FAB1B6319FE8C0D0064F073 /* Media.h */, 8FAB1B6419FE8C0D0064F073 /* Media.m */, ); name = Media; sourceTree = ""; }; 8FAB1B6619FE8DE20064F073 /* Thumbnail */ = { isa = PBXGroup; children = ( 8FAB1B6719FE8DF40064F073 /* Thumbnail.h */, 8FAB1B6819FE8DF40064F073 /* Thumbnail.m */, ); name = Thumbnail; sourceTree = ""; }; 8FAB1B6A19FE8EC00064F073 /* Rendition */ = { isa = PBXGroup; children = ( 8FAB1B6B19FE8EDA0064F073 /* Rendition.h */, 8FAB1B6C19FE8EDA0064F073 /* Rendition.m */, ); name = Rendition; sourceTree = ""; }; 8FAB1B6E19FE90080064F073 /* Publication */ = { isa = PBXGroup; children = ( 8FAB1B6F19FE90150064F073 /* Publication.h */, 8FAB1B7019FE90150064F073 /* Publication.m */, ); name = Publication; sourceTree = ""; }; 8FAB1B7219FE90AE0064F073 /* Statistics */ = { isa = PBXGroup; children = ( 8FAB1B7319FE90BC0064F073 /* Statistics.h */, 8FAB1B7419FE90BC0064F073 /* Statistics.m */, ); name = Statistics; sourceTree = ""; }; 8FAB1B7719FE929F0064F073 /* Link */ = { isa = PBXGroup; children = ( 8FAB1B7819FE92A80064F073 /* Link.h */, 8FAB1B7919FE92A80064F073 /* Link.m */, ); name = Link; sourceTree = ""; }; 8FAB1B7B19FE93100064F073 /* Subject */ = { isa = PBXGroup; children = ( 8FAB1B7C19FE931B0064F073 /* Subject.h */, 8FAB1B7D19FE931B0064F073 /* Subject.m */, ); name = Subject; sourceTree = ""; }; 8FAB1B7F19FE93E60064F073 /* MovieType */ = { isa = PBXGroup; children = ( 8FAB1B8019FE93F20064F073 /* MovieType.h */, 8FAB1B8119FE93F20064F073 /* MovieType.m */, ); name = MovieType; sourceTree = ""; }; 8FAB1B8319FE94340064F073 /* DefaultMedia */ = { isa = PBXGroup; children = ( 8FAB1B8419FE94450064F073 /* DefaultMedia.h */, 8FAB1B8519FE94450064F073 /* DefaultMedia.m */, ); name = DefaultMedia; sourceTree = ""; }; 8FAB1B8719FE951D0064F073 /* Release */ = { isa = PBXGroup; children = ( 8FAB1B8819FE95280064F073 /* Release.h */, 8FAB1B8919FE95280064F073 /* Release.m */, ); name = Release; sourceTree = ""; }; 8FAB1B8B19FE95D80064F073 /* Distributor */ = { isa = PBXGroup; children = ( 8FAB1B8C19FE95E10064F073 /* Distributor.h */, 8FAB1B8D19FE95E10064F073 /* Distributor.m */, ); name = Distributor; sourceTree = ""; }; 8FAB1B8F19FE964E0064F073 /* CastingShort */ = { isa = PBXGroup; children = ( 8FAB1B9019FE965A0064F073 /* CastingShort.h */, 8FAB1B9119FE965A0064F073 /* CastingShort.m */, ); name = CastingShort; sourceTree = ""; }; 8FAB1B9319FE96C00064F073 /* Trailer */ = { isa = PBXGroup; children = ( 8FAB1B9419FE96CC0064F073 /* Trailer.h */, 8FAB1B9519FE96CC0064F073 /* Trailer.m */, ); name = Trailer; sourceTree = ""; }; 8FAB1B9719FE971D0064F073 /* Poster */ = { isa = PBXGroup; children = ( 8FAB1B9819FE97290064F073 /* Poster.h */, 8FAB1B9919FE97290064F073 /* Poster.m */, ); name = Poster; sourceTree = ""; }; 8FAB1B9B19FE97670064F073 /* News */ = { isa = PBXGroup; children = ( 8FAB1B9C19FE97700064F073 /* News.h */, 8FAB1B9D19FE97700064F073 /* News.m */, ); name = News; sourceTree = ""; }; 8FAB1B9F19FE98730064F073 /* CastMember */ = { isa = PBXGroup; children = ( 8FAB1BA019FE987F0064F073 /* CastMember.h */, 8FAB1BA119FE987F0064F073 /* CastMember.m */, ); name = CastMember; sourceTree = ""; }; 8FAB1BA319FE99030064F073 /* PersonSmall */ = { isa = PBXGroup; children = ( 8FAB1BA419FE99160064F073 /* PersonSmall.h */, 8FAB1BA519FE99160064F073 /* PersonSmall.m */, ); name = PersonSmall; sourceTree = ""; }; 8FAB1BA719FE99950064F073 /* Feature */ = { isa = PBXGroup; children = ( 8FAB1BA819FE999F0064F073 /* Feature.h */, 8FAB1BA919FE999F0064F073 /* Feature.m */, ); name = Feature; sourceTree = ""; }; 8FAB1BAB19FE9A2F0064F073 /* Trivium */ = { isa = PBXGroup; children = ( 8FAB1BAC19FE9A390064F073 /* Trivium.h */, 8FAB1BAD19FE9A390064F073 /* Trivium.m */, ); name = Trivium; sourceTree = ""; }; 8FAB1BAF19FE9A890064F073 /* HelpfulPositiveReview */ = { isa = PBXGroup; children = ( 8FAB1BB019FE9A910064F073 /* HelpfulPositiveReview.h */, 8FAB1BB119FE9A910064F073 /* HelpfulPositiveReview.m */, ); name = HelpfulPositiveReview; sourceTree = ""; }; 8FAB1BB319FE9AF20064F073 /* Writer */ = { isa = PBXGroup; children = ( 8FAB1BB419FE9AF90064F073 /* Writer.h */, 8FAB1BB519FE9AF90064F073 /* Writer.m */, ); name = Writer; sourceTree = ""; }; 8FAB1BB719FE9B4B0064F073 /* HelpfulNegativeReview */ = { isa = PBXGroup; children = ( 8FAB1BB819FE9B530064F073 /* HelpfulNegativeReview.h */, 8FAB1BB919FE9B530064F073 /* HelpfulNegativeReview.m */, ); name = HelpfulNegativeReview; sourceTree = ""; }; 8FAB1BBB19FE9B9A0064F073 /* Review */ = { isa = PBXGroup; children = ( 8FAB1BBC19FE9BA10064F073 /* Review.h */, 8FAB1BBD19FE9BA10064F073 /* Review.m */, ); name = Review; sourceTree = ""; }; 8FAB1BBF19FE9C5B0064F073 /* NewsSource */ = { isa = PBXGroup; children = ( 8FAB1BC019FE9C630064F073 /* NewsSource.h */, 8FAB1BC119FE9C630064F073 /* NewsSource.m */, ); name = NewsSource; sourceTree = ""; }; 8FB2115D1A489D0100D40FA6 /* SlidingImageController */ = { isa = PBXGroup; children = ( 8FB2115E1A489D2200D40FA6 /* SlidingImageControllerController.h */, 8FB2115F1A489D2200D40FA6 /* SlidingImageControllerController.m */, ); name = SlidingImageController; sourceTree = ""; }; 8FB211611A49A10600D40FA6 /* RechercheSearchBarController */ = { isa = PBXGroup; children = ( 8FB211621A49A14700D40FA6 /* OCRechercheSearchBarController.h */, 8FB211631A49A14700D40FA6 /* OCRechercheSearchBarController.m */, ); name = RechercheSearchBarController; sourceTree = ""; }; 8FB3AFBC1A051F8E0075FDD6 /* GTAppMenuController */ = { isa = PBXGroup; children = ( 8FB3AFBD1A051F8E0075FDD6 /* GTAppMenuController.h */, 8FB3AFBE1A051F8E0075FDD6 /* GTAppMenuController.m */, ); path = GTAppMenuController; sourceTree = ""; }; 8FB3AFC01A05249C0075FDD6 /* DetailMovie */ = { isa = PBXGroup; children = ( 8FB3AFC11A0524F20075FDD6 /* MovieDetailController.h */, 8FB3AFC21A0524F20075FDD6 /* MovieDetailController.m */, ); name = DetailMovie; sourceTree = ""; }; 8FC02E5919FBDA5200121F1A /* Service */ = { isa = PBXGroup; children = ( 8FC02E6319FBEB8600121F1A /* AllocineService.h */, 8FC02E6419FBEB8600121F1A /* AllocineService.m */, 8FC02E6019FBE16D00121F1A /* ServiceSecurity.h */, 8FC02E6119FBE16D00121F1A /* ServiceSecurity.m */, ); path = Service; sourceTree = ""; }; 8FC8898A1A362709005873B2 /* LoadTheaterMoviesTask */ = { isa = PBXGroup; children = ( 8FC8898B1A36271E005873B2 /* OCLoadTheaterMoviesTask.h */, 8FC8898C1A36271E005873B2 /* OCLoadTheaterMoviesTask.m */, ); name = LoadTheaterMoviesTask; sourceTree = ""; }; E52C6C5B1A1F84A800BF2A48 /* DetailStar */ = { isa = PBXGroup; children = ( E52C6C581A1F797500BF2A48 /* OCStarDetailViewController.h */, E52C6C591A1F797500BF2A48 /* OCStarDetailViewController.m */, ); name = DetailStar; sourceTree = ""; }; E5945EBF1A541EB20009C30F /* LoadShowTimesTask */ = { isa = PBXGroup; children = ( E5945EBC1A541E3F0009C30F /* OCLoadShowTimesTask.h */, E5945EBD1A541E5B0009C30F /* OCLoadShowTimesTask.m */, ); name = LoadShowTimesTask; sourceTree = ""; }; E5A20D6F1A4829B3001B3EE0 /* StarDetail */ = { isa = PBXGroup; children = ( E5A413951A49DAF90087E6F8 /* filmo */, E5A20D831A486C70001B3EE0 /* photos */, E5A20D6C1A482928001B3EE0 /* StarDetail.h */, E5A20D6D1A482928001B3EE0 /* StarDetail.m */, F85E46A0A457B0C7EF09749C /* OCStarViewPager.m */, F85E4DB69990A0E490E22AE9 /* OCStarViewPager.h */, E5D5A4E81A51A5C9003079FD /* OCStarFilmoGrid.h */, E5D5A4E91A51A5C9003079FD /* OCStarFilmoGrid.m */, E5945ECE1A56E13B0009C30F /* StarDetailDelegate.h */, ); name = StarDetail; sourceTree = ""; }; E5A20D731A482E9B001B3EE0 /* LoadPersonTask */ = { isa = PBXGroup; children = ( E5A20D721A482E96001B3EE0 /* OCLoadPersonTask.h */, E5A20D701A482E8F001B3EE0 /* OCLoadPersonTask.m */, ); name = LoadPersonTask; sourceTree = ""; }; E5A20D831A486C70001B3EE0 /* photos */ = { isa = PBXGroup; children = ( E5A20D841A486C7F001B3EE0 /* OCStarPhoto.h */, E5A20D851A486C7F001B3EE0 /* OCStarPhoto.m */, E5A20D7C1A4866AA001B3EE0 /* StarDetailPhotos.h */, E5A20D7D1A4866AA001B3EE0 /* StarDetailPhotos.m */, ); name = photos; sourceTree = ""; }; E5A413951A49DAF90087E6F8 /* filmo */ = { isa = PBXGroup; children = ( E5A20D8C1A487DC3001B3EE0 /* OCFilmoElement.h */, E5A20D8D1A487DC3001B3EE0 /* OCFilmoElement.m */, E5A20D891A487C65001B3EE0 /* OCFilmoGridLayout.h */, E5A20D8A1A487C65001B3EE0 /* OCFilmoGridLayout.m */, ); name = filmo; sourceTree = ""; }; E5D1CD101A237F4E003C6B8F /* HeaderStarDetail */ = { isa = PBXGroup; children = ( E5D1CD0D1A237F4B003C6B8F /* HeaderStarDetail.h */, E5D1CD0E1A237F4B003C6B8F /* HeaderStarDetail.m */, ); name = HeaderStarDetail; sourceTree = ""; }; E5D1CD141A238436003C6B8F /* DoubleController */ = { isa = PBXGroup; children = ( E5D1CD111A23820A003C6B8F /* OCDoubleController.h */, E5D1CD121A23820A003C6B8F /* OCDoubleController.m */, ); name = DoubleController; sourceTree = ""; }; E5D1CD1B1A248837003C6B8F /* core */ = { isa = PBXGroup; children = ( E5D1CD141A238436003C6B8F /* DoubleController */, E5D1CD1F1A248871003C6B8F /* ListController */, ); name = core; sourceTree = ""; }; E5D1CD1F1A248871003C6B8F /* ListController */ = { isa = PBXGroup; children = ( E5D1CD1C1A24886D003C6B8F /* OCListViewController.h */, E5D1CD1D1A24886D003C6B8F /* OCListViewController.m */, ); name = ListController; sourceTree = ""; }; E5D5A4F81A52B5F2003079FD /* ThreaderDetailMovie */ = { isa = PBXGroup; children = ( E5D5A4F51A52B5D0003079FD /* OCTheaterDetailMovieController.h */, E5D5A4F61A52B5D0003079FD /* OCTheaterDetailMovieController.m */, ); name = ThreaderDetailMovie; sourceTree = ""; }; E5D5A4F91A52B619003079FD /* TheaderDetailMovie */ = { isa = PBXGroup; children = ( E5D5A5131A52E4AF003079FD /* CellTheaterHoraires.h */, E5D5A5141A52E4AF003079FD /* CellTheaterHoraires.m */, E5D5A4FA1A52B64E003079FD /* TheaterDetailMovieBackground.h */, E5D5A4FB1A52B64E003079FD /* TheaterDetailMovieBackground.m */, E5D5A5091A52D540003079FD /* TheaterDetailMovieForeground.h */, E5D5A50A1A52D540003079FD /* TheaterDetailMovieForeground.m */, E5D5A50C1A52D80F003079FD /* TheaterDetailMoviePageHoraires.h */, E5D5A50D1A52D80F003079FD /* TheaterDetailMoviePageHoraires.m */, ); name = TheaderDetailMovie; sourceTree = ""; }; E5D5FF451A24B46500B9B6C5 /* Loader */ = { isa = PBXGroup; children = ( E5D1CD201A2490A7003C6B8F /* OCLoader.h */, E5D1CD211A2490A7003C6B8F /* OCLoader.m */, ); name = Loader; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 4AA1873E19F6D7CD00B91E25 /* ociney */ = { isa = PBXNativeTarget; buildConfigurationList = 4AA1877119F6D7CE00B91E25 /* Build configuration list for PBXNativeTarget "ociney" */; buildPhases = ( 55356BFC3EC2012C7B5D5DCD /* Check Pods Manifest.lock */, 4AA1873B19F6D7CD00B91E25 /* Sources */, 4AA1873C19F6D7CD00B91E25 /* Frameworks */, 4AA1873D19F6D7CD00B91E25 /* Resources */, E3B1ACFC0D44C925E0708E08 /* Copy Pods Resources */, E52F24D61A4B12DE00FE5C73 /* ShellScript */, ); buildRules = ( ); dependencies = ( ); name = ociney; productName = ociney; productReference = 4AA1873F19F6D7CD00B91E25 /* ociney.app */; productType = "com.apple.product-type.application"; }; 4AA1875F19F6D7CD00B91E25 /* ocineyTests */ = { isa = PBXNativeTarget; buildConfigurationList = 4AA1877419F6D7CE00B91E25 /* Build configuration list for PBXNativeTarget "ocineyTests" */; buildPhases = ( 4AA1875C19F6D7CD00B91E25 /* Sources */, 4AA1875D19F6D7CD00B91E25 /* Frameworks */, 4AA1875E19F6D7CD00B91E25 /* Resources */, ); buildRules = ( ); dependencies = ( 4AA1876619F6D7CE00B91E25 /* PBXTargetDependency */, ); name = ocineyTests; productName = ocineyTests; productReference = 4AA1876019F6D7CD00B91E25 /* ocineyTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 4AA1873719F6D7CD00B91E25 /* Project object */ = { isa = PBXProject; attributes = { CLASSPREFIX = OC; LastUpgradeCheck = 0610; ORGANIZATIONNAME = bdc; TargetAttributes = { 4AA1873E19F6D7CD00B91E25 = { DevelopmentTeam = 3YEWT2X97B; }; 4AA1875F19F6D7CD00B91E25 = { TestTargetID = 4AA1873E19F6D7CD00B91E25; }; }; }; buildConfigurationList = 4AA1873A19F6D7CD00B91E25 /* Build configuration list for PBXProject "ociney" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 4AA1873619F6D7CD00B91E25; productRefGroup = 4AA1874019F6D7CD00B91E25 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 4AA1873E19F6D7CD00B91E25 /* ociney */, 4AA1875F19F6D7CD00B91E25 /* ocineyTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 4AA1873D19F6D7CD00B91E25 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( E5945ECD1A56D32E0009C30F /* ic_version_white_vo.png in Resources */, 8FC02E5319FBC0C900121F1A /* star_off_med.png in Resources */, 8FB3AFB71A04FF850075FDD6 /* ic_drawer_credits.png in Resources */, 8F8EDB5A1A2A21A500383D27 /* porte.png in Resources */, 8F8EDB6F1A2A3C8C00383D27 /* logo_pathe.png in Resources */, 8F547A1E1A5440F300D79E8A /* ic_bandeannonce_80.png in Resources */, 8FB2115A1A48609500D40FA6 /* ic_version_white_3d.png in Resources */, 8FB3AFB11A04FAAC0075FDD6 /* ic_cropped_crown.png in Resources */, 8F8EDB561A2A144C00383D27 /* SalleCell.xib in Resources */, E5A20D881A487563001B3EE0 /* filmo_reflet.png in Resources */, 8FC889891A3624DC005873B2 /* long_shadow.png in Resources */, 8F8EDB6A1A2A3C8C00383D27 /* logo_gaumont_pathe.png in Resources */, 8F547A1F1A5440F300D79E8A /* ic_bandeannonce.png in Resources */, 8F76038619FAA5AD00E9A9B9 /* menu.png in Resources */, 8F8EDB701A2A3C8C00383D27 /* logo_ugc.png in Resources */, 8FB3AFBA1A04FF850075FDD6 /* ic_drawer_salles.png in Resources */, E5945ED51A56F2860009C30F /* konami_flo.png in Resources */, 8FB3AFB91A04FF850075FDD6 /* ic_drawer_films.png in Resources */, E5945ECC1A56D32E0009C30F /* ic_version_white_vf.png in Resources */, 8F547A3E1A57F7D600D79E8A /* arrow.png in Resources */, 8F35FF9A1A01311D00C4F6D8 /* ic_placeholder_people.png in Resources */, E5A20D761A484551001B3EE0 /* Localizable.strings in Resources */, 8FA8BFF51A30833800ABE716 /* reflet_framewood.png in Resources */, E5D5A5041A52B8B8003079FD /* curtain_left.png in Resources */, E5A20D821A486982001B3EE0 /* plus_dashed_photos_black.png in Resources */, E5D5A5031A52B8B8003079FD /* cinema.png in Resources */, 8F35FFA01A0159BE00C4F6D8 /* ic_topstar_3.png in Resources */, E5945ED71A56F2860009C30F /* konami_pooley.png in Resources */, 4AA1878119F6E06B00B91E25 /* splash_motif_stripes_black.png in Resources */, E5945ED91A56F2AD0009C30F /* ic_in_app_big.png in Resources */, E5945ECA1A56D32E0009C30F /* ic_version_white_2d.png in Resources */, 8F750E1A1A1CEC7300D9733B /* ic_action_search.png in Resources */, 8F547A2E1A54674400D79E8A /* pellicule.png in Resources */, 4AA1878419F6ED4700B91E25 /* ic_glass_reflect_color_big.png in Resources */, 8F8EDB5E1A2A31D700383D27 /* ic_nav.png in Resources */, E5945ED61A56F2860009C30F /* konami_kevin.png in Resources */, 4AA1875B19F6D7CD00B91E25 /* Images.xcassets in Resources */, 4AA1874D19F6D7CD00B91E25 /* InfoPlist.strings in Resources */, 8FC02E5819FBC70800121F1A /* star_on_small.png in Resources */, 8F35FF981A011EBB00C4F6D8 /* OCStarCell.xib in Resources */, 8F8EDB5C1A2A235300383D27 /* ic_handicap_skew.png in Resources */, 8F8EDB6E1A2A3C8C00383D27 /* logo_mk2.png in Resources */, 8F750E1C1A1E6B7200D9733B /* search-25.png in Resources */, 8F310D0E1A2E1F4E002618B1 /* wood_frame.png in Resources */, E5D5A5081A52B8B8003079FD /* seats.png in Resources */, 8F8EDB681A2A3C8C00383D27 /* logo_cgr.png in Resources */, 8F547A231A5440FE00D79E8A /* ic_picture_30.png in Resources */, 8F547A251A5440FE00D79E8A /* ic_picture.png in Resources */, 8F35FF9C1A01441000C4F6D8 /* ic_topstar_1.png in Resources */, E5D5A5071A52B8B8003079FD /* curtain_sub_right.png in Resources */, E5D5A5111A52E2F1003079FD /* ic_next.png in Resources */, 8F8EDB581A2A18DE00383D27 /* logo_default.png in Resources */, 8F8EDB691A2A3C8C00383D27 /* logo_cineville.png in Resources */, E5D5A4E41A519FFC003079FD /* ic_filmo_30.png in Resources */, E5D5A5051A52B8B8003079FD /* curtain_right.png in Resources */, 8F310D0C1A2E1F4E002618B1 /* charniere.png in Resources */, 8F8EDB6B1A2A3C8C00383D27 /* logo_gaumont.png in Resources */, 8FB3AFBB1A04FF850075FDD6 /* ic_drawer_stars.png in Resources */, E5D5A4E61A519FFC003079FD /* ic_picture2_30.png in Resources */, 8F8EDB6C1A2A3C8C00383D27 /* logo_kinepolis.png in Resources */, E5D5A5061A52B8B8003079FD /* curtain_sub_left.png in Resources */, E5A20D811A486982001B3EE0 /* plus_black.png in Resources */, 8FC02E5419FBC0C900121F1A /* star_on_med.png in Resources */, E5D5A4E71A519FFC003079FD /* ic_picture2_80.png in Resources */, 8F35FF9F1A0159BE00C4F6D8 /* ic_topstar_2.png in Resources */, 8F310D0D1A2E1F4E002618B1 /* serrure.png in Resources */, 8FC02E5719FBC70800121F1A /* star_off_small.png in Resources */, 8F547A1D1A5440F300D79E8A /* ic_bandeannonce_30.png in Resources */, 8F8F87351A14FC99008DABC2 /* plus_dashed_photos_white.png in Resources */, E5D5A5121A52E2F1003079FD /* ic_prev.png in Resources */, 8FB3AFB81A04FF850075FDD6 /* ic_drawer_favoris.png in Resources */, 8F8F87331A14FC90008DABC2 /* plus_white.png in Resources */, 8F547A241A5440FE00D79E8A /* ic_picture_80.png in Resources */, E5D5A4E51A519FFC003079FD /* ic_filmo_80.png in Resources */, 4AA1878519F6ED4700B91E25 /* ic_txt_ociney.png in Resources */, 8F547A301A54774300D79E8A /* play.png in Resources */, 8FA8BFF31A307D7200ABE716 /* folded_effect.png in Resources */, 8F76036D19FA895B00E9A9B9 /* OCMovieCell.xib in Resources */, 8F8EDB6D1A2A3C8C00383D27 /* logo_megarama.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; 4AA1875E19F6D7CD00B91E25 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 4AA1876C19F6D7CE00B91E25 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 55356BFC3EC2012C7B5D5DCD /* Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; E3B1ACFC0D44C925E0708E08 /* Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ociney/Pods-ociney-resources.sh\"\n"; showEnvVarsInLog = 0; }; E52F24D61A4B12DE00FE5C73 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "./Fabric.framework/run 29cbd600bb8183011201895a931db91e93f2d614 504baacd84c8eace8a20b39f18f7f70209c06de40cc840f0df29c8d693cc347c"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 4AA1873B19F6D7CD00B91E25 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 8FA166C01A1F5FA2005D4F03 /* RechercheTask.m in Sources */, E5A413941A49C4160087E6F8 /* Participation.m in Sources */, 8FAB1B5D19FE886A0064F073 /* Picture.m in Sources */, E5A20D7E1A4866AA001B3EE0 /* StarDetailPhotos.m in Sources */, 8FAB1B2919FE658B0064F073 /* Feed.m in Sources */, 8FAB1B9219FE965A0064F073 /* CastingShort.m in Sources */, 8FAB1BAE19FE9A390064F073 /* Trivium.m in Sources */, 8FAB1BBE19FE9BA10064F073 /* Review.m in Sources */, 8FAB1B2D19FE673C0064F073 /* Movie.m in Sources */, 8F76036519FA6ED000E9A9B9 /* OCListMovieViewController.m in Sources */, 8FC02E6219FBE16D00121F1A /* ServiceSecurity.m in Sources */, 8FB211641A49A14700D40FA6 /* OCRechercheSearchBarController.m in Sources */, 8FAB1B8619FE94450064F073 /* DefaultMedia.m in Sources */, 8F2537281A079A7100D88B7D /* HeaderMovieDetail.m in Sources */, 8FAB1B7119FE90150064F073 /* Publication.m in Sources */, 8F76036B19FA871200E9A9B9 /* OCMovieCell.m in Sources */, 8FAB1B5519FE7DEC0064F073 /* Scr.m in Sources */, E5D5A5181A530D7E003079FD /* MovieDetailTheaterList.m in Sources */, E5D1CD131A23820A003C6B8F /* OCDoubleController.m in Sources */, E5A20D711A482E8F001B3EE0 /* OCLoadPersonTask.m in Sources */, 8FAB1B9619FE96CC0064F073 /* Trailer.m in Sources */, E5D1CD1E1A24886D003C6B8F /* OCListViewController.m in Sources */, E5D1CD0F1A237F4B003C6B8F /* HeaderStarDetail.m in Sources */, 8FAB1B5919FE87140064F073 /* Horaires.m in Sources */, 8F310D121A2E27DB002618B1 /* PosterView.m in Sources */, 8FAB1B4D19FE7CEC0064F073 /* Version.m in Sources */, 8FAB1BA619FE99160064F073 /* PersonSmall.m in Sources */, E5945ED11A56F1380009C30F /* OCCreditsViewController.m in Sources */, 8FAB1BB619FE9AF90064F073 /* Writer.m in Sources */, E5A20D8B1A487C65001B3EE0 /* OCFilmoGridLayout.m in Sources */, 8FAB1B9E19FE97700064F073 /* News.m in Sources */, E5D5A4DE1A519500003079FD /* OCMovieViewPager.m in Sources */, E5A20D7B1A484F8F001B3EE0 /* DateUtils.m in Sources */, 8F547A371A57400900D79E8A /* AllocineResponseSmall.m in Sources */, 8F76037E19FAA37700E9A9B9 /* TTScrollViewWrapper.m in Sources */, 8FB3AFC31A0524F20075FDD6 /* MovieDetailController.m in Sources */, E5945EBE1A541E5B0009C30F /* OCLoadShowTimesTask.m in Sources */, 8FAB1B3519FE76780064F073 /* PersonFull.m in Sources */, 8FAB1BBA19FE9B530064F073 /* HelpfulNegativeReview.m in Sources */, 8F547A341A57381A00D79E8A /* RechercheTaskStar.m in Sources */, 8FAB1B7A19FE92A80064F073 /* Link.m in Sources */, 8FA166C41A1F6079005D4F03 /* RechercheTaskMovie.m in Sources */, 8F547A291A54461300D79E8A /* LoadBandeAnnonceFilmTask.m in Sources */, E5A20D6E1A482928001B3EE0 /* StarDetail.m in Sources */, 4AA1875319F6D7CD00B91E25 /* OCAppDelegate.m in Sources */, 8FAB1B4119FE79F30064F073 /* TheaterShowtime.m in Sources */, 4AA1874F19F6D7CD00B91E25 /* main.m in Sources */, 8FAB1B3D19FE78B40064F073 /* Name.m in Sources */, 8FA8C00C1A31DE4A00ABE716 /* OCPosterController.m in Sources */, 8FAB1B3119FE6CE90064F073 /* Theater.m in Sources */, E5A62A3B1A5ACB76002F92CC /* OCHeaderVersionView.m in Sources */, 8FAB1B6119FE89410064F073 /* Geoloc.m in Sources */, 8F76037D19FAA37700E9A9B9 /* TTScrollSlidingPagesController.m in Sources */, 8F547A421A57FCB600D79E8A /* OCEmptyView.m in Sources */, 8FAB1B8A19FE95280064F073 /* Release.m in Sources */, 8FAB1B8219FE93F20064F073 /* MovieType.m in Sources */, 8FAB1B1A19FCFB810064F073 /* OCLoadMoviesTask.m in Sources */, E5D1CD171A238501003C6B8F /* UIImage+Blur.m in Sources */, 8F310D081A2E1399002618B1 /* OCTheaterDetailController.m in Sources */, 8FAB1BC219FE9C630064F073 /* NewsSource.m in Sources */, 8F8EDB4A1A29F1AD00383D27 /* ListSallesController.m in Sources */, 8FAB1BB219FE9A910064F073 /* HelpfulPositiveReview.m in Sources */, 4AA1875919F6D7CD00B91E25 /* OCSplashViewController.m in Sources */, 8FC8898D1A36271E005873B2 /* OCLoadTheaterMoviesTask.m in Sources */, E5D1CD221A2490A7003C6B8F /* OCLoader.m in Sources */, 8F547A3B1A5740EB00D79E8A /* FeedSmall.m in Sources */, E5945EDC1A56FDD70009C30F /* OCMovieDetailStarList.m in Sources */, 8F35FF971A011EBB00C4F6D8 /* OCStarCell.m in Sources */, 8FC02E6519FBEB8600121F1A /* AllocineService.m in Sources */, 8FAB1B6D19FE8EDA0064F073 /* Rendition.m in Sources */, E5D5A50B1A52D540003079FD /* TheaterDetailMovieForeground.m in Sources */, 8FAB1B3919FE77A40064F073 /* ModelObject.m in Sources */, 8F76038019FAA37700E9A9B9 /* TTSlidingPageTitle.m in Sources */, 8FAB1B5119FE7D6A0064F073 /* OnShow.m in Sources */, 8FAB1B7E19FE931B0064F073 /* Subject.m in Sources */, 8F8EDB521A29F72700383D27 /* OCLoadTheatersTask.m in Sources */, 8F35FF921A01199000C4F6D8 /* Person.m in Sources */, 8FB211601A489D2200D40FA6 /* SlidingImageControllerController.m in Sources */, 8F8EDB4E1A29F3AF00383D27 /* SalleCell.m in Sources */, E5D5A4EA1A51A5C9003079FD /* OCStarFilmoGrid.m in Sources */, 8FAB1B6919FE8DF40064F073 /* Thumbnail.m in Sources */, 8F310D041A2DEEA2002618B1 /* RechercheTaskTheater.m in Sources */, 8FAB1B7519FE90BC0064F073 /* Statistics.m in Sources */, E5945EDF1A57005E0009C30F /* OCCastMember.m in Sources */, E5D5A50E1A52D80F003079FD /* TheaterDetailMoviePageHoraires.m in Sources */, E5945EC21A569C5F0009C30F /* OCMovieBandeAnnonceSliderElement.m in Sources */, E5A20D861A486C7F001B3EE0 /* OCStarPhoto.m in Sources */, 8FAB1B9A19FE97290064F073 /* Poster.m in Sources */, 8F25373D1A0A221E00D88B7D /* LoadMovieFullTask.m in Sources */, 8FAB1B4919FE7C090064F073 /* MovieShowtime.m in Sources */, 8FAB1BAA19FE999F0064F073 /* Feature.m in Sources */, 4AA1877C19F6DE8200B91E25 /* Color+Hex.m in Sources */, 8FAB1B1519FCFAAE0064F073 /* AsyncTask.m in Sources */, E5D5A5151A52E4AF003079FD /* CellTheaterHoraires.m in Sources */, 8F35FF8E1A01152300C4F6D8 /* OCLoadStarsTask.m in Sources */, 8F76037C19FAA37700E9A9B9 /* TTBlackTriangle.m in Sources */, 8FAB1B2519FE64A80064F073 /* AllocineResponse.m in Sources */, 8F76038419FAA4B800E9A9B9 /* LeftViewController.m in Sources */, E5D5A4F71A52B5D0003079FD /* OCTheaterDetailMovieController.m in Sources */, E5A20D8E1A487DC3001B3EE0 /* OCFilmoElement.m in Sources */, 8F76037F19FAA37700E9A9B9 /* TTSlidingPage.m in Sources */, 8FAB1B6519FE8C0D0064F073 /* Media.m in Sources */, 8FAB1BA219FE987F0064F073 /* CastMember.m in Sources */, 8F35FF8A1A0113E000C4F6D8 /* OCStarListController.m in Sources */, 8F547A2C1A5453EA00D79E8A /* OCMovieBandeAnnonceSlider.m in Sources */, 8FAB1B4519FE7B080064F073 /* Place.m in Sources */, 8F547A461A58081B00D79E8A /* OCEmptyViewGPS.m in Sources */, E5D5A4FC1A52B64E003079FD /* TheaterDetailMovieBackground.m in Sources */, 8FAB1B8E19FE95E10064F073 /* Distributor.m in Sources */, E52C6C5A1A1F797500BF2A48 /* OCStarDetailViewController.m in Sources */, 8FB3AFBF1A051F8E0075FDD6 /* GTAppMenuController.m in Sources */, E5DA62141A4AECD200DBC4DA /* ViewPager.m in Sources */, 8F25372D1A07FF2500D88B7D /* MovieDetailContent.m in Sources */, F85E4DBBC68F51171C0E5E19 /* OCStarViewPager.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 4AA1875C19F6D7CD00B91E25 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 4AA1876E19F6D7CE00B91E25 /* ocineyTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 4AA1876619F6D7CE00B91E25 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4AA1873E19F6D7CD00B91E25 /* ociney */; targetProxy = 4AA1876519F6D7CE00B91E25 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ 4AA1874B19F6D7CD00B91E25 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 4AA1874C19F6D7CD00B91E25 /* en */, ); name = InfoPlist.strings; sourceTree = ""; }; 4AA1876A19F6D7CE00B91E25 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 4AA1876B19F6D7CE00B91E25 /* en */, ); name = InfoPlist.strings; sourceTree = ""; }; E5A20D781A484551001B3EE0 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( E5A20D771A484551001B3EE0 /* Base */, ); name = Localizable.strings; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 4AA1876F19F6D7CE00B91E25 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.1; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; }; 4AA1877019F6D7CE00B91E25 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.1; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; 4AA1877219F6D7CE00B91E25 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 5E1573FEA25E8FC98B424C02 /* Pods-ociney.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CODE_SIGN_IDENTITY = "iPhone Distribution: CHAMPIGNY Florent (3YEWT2X97B)"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "ociney/ociney-Prefix.pch"; INFOPLIST_FILE = "ociney/ociney-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.1; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/Pods\"/**"; WRAPPER_EXTENSION = app; }; name = Debug; }; 4AA1877319F6D7CE00B91E25 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 8C1B5404BD66A4D412BA7FBC /* Pods-ociney.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CODE_SIGN_IDENTITY = "iPhone Distribution: CHAMPIGNY Florent (3YEWT2X97B)"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "ociney/ociney-Prefix.pch"; INFOPLIST_FILE = "ociney/ociney-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.1; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/Pods\"/**"; WRAPPER_EXTENSION = app; }; name = Release; }; 4AA1877519F6D7CE00B91E25 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/ociney.app/ociney"; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "ociney/ociney-Prefix.pch"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = "ocineyTests/ocineyTests-Info.plist"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUNDLE_LOADER)"; WRAPPER_EXTENSION = xctest; }; name = Debug; }; 4AA1877619F6D7CE00B91E25 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/ociney.app/ociney"; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", "$(DEVELOPER_FRAMEWORKS_DIR)", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "ociney/ociney-Prefix.pch"; INFOPLIST_FILE = "ocineyTests/ocineyTests-Info.plist"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUNDLE_LOADER)"; WRAPPER_EXTENSION = xctest; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 4AA1873A19F6D7CD00B91E25 /* Build configuration list for PBXProject "ociney" */ = { isa = XCConfigurationList; buildConfigurations = ( 4AA1876F19F6D7CE00B91E25 /* Debug */, 4AA1877019F6D7CE00B91E25 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4AA1877119F6D7CE00B91E25 /* Build configuration list for PBXNativeTarget "ociney" */ = { isa = XCConfigurationList; buildConfigurations = ( 4AA1877219F6D7CE00B91E25 /* Debug */, 4AA1877319F6D7CE00B91E25 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4AA1877419F6D7CE00B91E25 /* Build configuration list for PBXNativeTarget "ocineyTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 4AA1877519F6D7CE00B91E25 /* Debug */, 4AA1877619F6D7CE00B91E25 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 4AA1873719F6D7CD00B91E25 /* Project object */; } ================================================ FILE: ociney.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: ociney.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: ocineyTests/en.lproj/InfoPlist.strings ================================================ /* Localized versions of Info.plist keys */ ================================================ FILE: ocineyTests/ocineyTests-Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier com.bdc.${PRODUCT_NAME:rfc1034identifier} CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: ocineyTests/ocineyTests.m ================================================ // // ocineyTests.m // ocineyTests // // Created by Florent Champigny on 21/10/2014. // Copyright (c) 2014 bdc. All rights reserved. // #import @interface ocineyTests : XCTestCase @end @implementation ocineyTests - (void)setUp { [super setUp]; // Put setup code here. This method is called before the invocation of each test method in the class. } - (void)tearDown { // Put teardown code here. This method is called after the invocation of each test method in the class. [super tearDown]; } - (void)testExample { XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); } @end