项目用到的icarouls类和UIEffectDesignerView类,菜单技巧,构思(金方圆)

时间:2021-12-12 21:15:47

//

//  MenuHomeViewController.m

//  HFYS

//

//  Created by Showsoft_002 on 13-8-14.

//  Copyright (c) 2013年 Showsoft_002. All rights reserved.

//

#import "MenuHomeViewController.h"

#import "MainControlViewController.h"

#import "iCarousel.h"

#import "AssitentTimer.h"

#import "ContentPageViewController.h"

#import "ItemsSubViewIndex.h"

#import "UIEffectDesignerView.h"

#import "CalculatorViewController.h"

#import "JiSuanQiViewController.h"

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

#define NUMBER_OF_ITEMS (IS_IPAD? 19: 12)

#define NUMBER_OF_VISIBLE_ITEMS 5

#define ITEM_SPACING 77

#define INCLUDE_PLACEHOLDERS NO

typedefenum {

items_BrandHomeView = 0 ,

items_TraficHomeView,

items_ProjectHomeView ,

items_PropertyShowView,

items_CalulatorShowView,

}ItemsViewControllerNameEnum;

@interfaceMenuHomeViewController ()<iCarouselDataSource , iCarouselDelegate,AsstentTimerDelegate>{

UIImageView *backImageView;

int subViewIndex;

iCarousel *myIcarousel;

NSArray *contentArray;

JiSuanQiViewController *jisuanqiView;

ContentPageViewController *contentPageView;

CGRect remberFrame;

NSTimer *animationTimer;

}

-(void)calButtonAction:(UIButton *)sender;

@end

@implementation MenuHomeViewController

- (void)dealloc{

if( contentPageView ){

[contentPageView.viewremoveFromSuperview];

contentPageView = nil;

}

myIcarousel.delegate = nil;

myIcarousel.dataSource = nil;

[myIcarouselremoveFromSuperview];

myIcarousel = nil ;

contentArray = nil ;

[backImageViewremoveFromSuperview];

backImageView = nil ;

[selfstopMenuTimer];

}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) {

// Custom initialization

}

returnself;

}

- (void)viewDidLoad

{

[superviewDidLoad];

// Do any additional setup after loading the view.

backImageView = [[UIImageViewalloc]initWithFrame:CurrentDeviceBounds];

backImageView.userInteractionEnabled = YES ;

backImageView.tag = 1 ;

[self.viewaddSubview:backImageView];

UIEffectDesignerView* effectView = [UIEffectDesignerVieweffectWithFile:@"StartPage.ped"];

[backImageView addSubview:effectView];

contentArray = [NSArrayarrayWithObjects:

SSENCRYPTED_IMAGE(@"Item_pic1.png"),SSENCRYPTED_IMAGE(@"Item_pic2.png"),SSENCRYPTED_IMAGE(@"Item_pic3.png"),SSENCRYPTED_IMAGE(@"Item_pic4.png"),SSENCRYPTED_IMAGE(@"Item_pic5.png"),

nil];

//    myIcarousel = [[iCarousel alloc] initWithFrame:CGRectMake(0, 670/2 , 1024, 300)];//CGRectMake(0, 392/2-150, 790, 515)

//    myIcarousel.type = iCarouselTypeCylinder;

//    myIcarousel.delegate = self;

//    myIcarousel.dataSource = self;

//    //add carousel to view

//    [backImageView addSubview:myIcarousel];

}

- (void)didReceiveMemoryWarning

{

[superdidReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

- (void)enterAnimationWhenAppear{

float delayTimes = 0;

GYLWhiteMaskView *logo = [self addLogoWithFrame:CGRectMake((1024-216)/2, 126/2, 216, 185) inView:backImageView];

[selfgeneryallyAnimationWithView:logo animationType:GenerallyAnimationSliderFormTopduration:0.3delayTime:delayTimes finishedBlock:nil];

delayTimes += 0.3;

NSArray *array = [NSArray arrayWithObjects:

[NSValue valueWithCGPoint:CGPointMake(926/2, 672/2)],@"Item_pic3.png",

[NSValue valueWithCGPoint:CGPointMake(656/2, 730/2)],@"Item_pic2.png",

[NSValue valueWithCGPoint:CGPointMake(1224/2, 730/2)],@"Item_pic4.png",

[NSValue valueWithCGPoint:CGPointMake(406/2, 766/2)],@"Item_pic1.png",

[NSValue valueWithCGPoint:CGPointMake(1488/2, 766/2)],@"Item_pic5.png",

nil];

for( int i=0;i<5;i++ ){

NSString *string = [array objectAtIndex:2*i+1];

UIImage *locImage = SSENCRYPTED_IMAGE(string);

CGRect framess ;

framess.origin = [[array objectAtIndex:2*i] CGPointValue];

framess.size = locImage.size;

UIButton *button = [UIButtonbuttonWithType:UIButtonTypeCustom];

button.frame = framess;

button.tag = 100 + i ;

[button setBackgroundImage:locImage forState:UIControlStateNormal];

[button addTarget:selfaction:@selector(itemsButtonAction:) forControlEvents:UIControlEventTouchUpInside];

[backImageView addSubview:button];

[selfpopAnimationAndRoateWithView:button delayTime:delayTimes];

if( i%2 == 0 ) delayTimes += 0.6 ;

}

UIButton *backHomeButton = [UIButtonbuttonWithType:UIButtonTypeCustom];

backHomeButton.frame = CGRectMake((1024-146)/2, 1374/2 - 20, 146, 20+40);

[backHomeButton setImage:SSENCRYPTED_IMAGE(@"BackHomeButton.png") forState:UIControlStateNormal];

[backHomeButton addTarget:selfaction:@selector(backButtonAction:) forControlEvents:UIControlEventTouchUpInside];

[backImageView addSubview: backHomeButton];

[selfgeneryallyAnimationWithView:backHomeButton animationType:GenerallyAnimationSliderFormBottomduration:0.3delayTime:delayTimes finishedBlock:nil];

UIButton *calButton = [UIButtonbuttonWithType:UIButtonTypeCustom];

calButton.frame = CGRectMake(1906/2 - 10, 32/2-10, 36+20, 36+20);

[calButton setImage:SSENCRYPTED_IMAGE(@"CalclutorBtn.png") forState:UIControlStateNormal];

[calButton addTarget:selfaction:@selector(calButtonAction:) forControlEvents:UIControlEventTouchUpInside];

[backImageView addSubview:calButton];

[selfgeneryallyAnimationWithView:calButton animationType:GenerallyAnimationSliderFormTopduration:0.3delayTime:delayTimes finishedBlock:nil];

[selfstartAssitentTimer];

[selfstartMenuTimer];

}

-(void)startMenuTimer{

//定时翻转列表

animationTimer = [NSTimerscheduledTimerWithTimeInterval:3target:selfselector:@selector(timeAction:) userInfo:nilrepeats:YES];

}

-(void)stopMenuTimer{

//释放Timer

if (animationTimer) {

[animationTimerinvalidate];

animationTimer = nil;

}

}

//定时器事件

-(void)timeAction:(id)sender

{

NSLog(@"time");

[selfstartItemAnimation:YES];

}

//播放列表动画

-(void)startItemAnimation:(BOOL)isLeft

{

int count=5;

if(!isLeft)

{

for (int i=0; i<count; i++) {

[UIViewanimateWithDuration:0.7delay:0.2*i options:UIViewAnimationOptionCurveEaseInOutanimations:^{

UIView *parentView = [backImageView viewWithTag:100+(count-1 -i)];

//设置动画效果

[UIViewsetAnimationTransition: UIViewAnimationTransitionFlipFromRightforView:parentView cache:NO];  //从上向下

}completion:nil];

}

}else

{

for (int i=0; i<count; i++) {

[UIViewanimateWithDuration:0.7delay:0.2*i options:UIViewAnimationOptionCurveEaseInOutanimations:^{

UIView *parentView = [backImageView viewWithTag:100+i];

//设置动画效果

[UIViewsetAnimationTransition: UIViewAnimationTransitionFlipFromLeftforView:parentView cache:NO];  //从上向下

}completion:nil];

}

}

}

- (void)popAnimationAndRoateWithView:(UIView *)animationView delayTime:(float)delayTime{

__weakMenuHomeViewController *weakSelf = self ;

[selfgeneryallyAnimationWithView:animationView animationType:GenerallyAnimationPopOutduration:0.3delayTime:delayTime finishedBlock:^{

[weakSelf roateAnimationWithView:animationView];

}];

}

- (void)roateAnimationWithView:(UIView *)animaitonView{

[UIViewanimateWithDuration:0.7delay:0options:UIViewAnimationOptionCurveEaseInOutanimations:^{

//设置动画效果

[UIViewsetAnimationTransition: UIViewAnimationTransitionFlipFromLeftforView:animaitonView cache:NO];  //从上向下

}completion:nil];

}

- (void)backButtonAction:(UIButton *)sender{

UIResponder *sponder = [selfcheckNextResponderIsKindOfViewController:[MainControlViewControllerclass]];

if( sponder ){

MainControlViewController *lfc = (MainControlViewController *)sponder ;

[lfc transViewToHomePageView];

}

}

- (void)playVideoAction:(UIButton *)sender{

UIResponder *sponder = [selfcheckNextResponderIsKindOfViewController:[MainControlViewControllerclass]];

if( sponder ){

MainControlViewController *lfc = (MainControlViewController *)sponder ;

[lfc transViewToVideoView];

}

}

- (void)calculatorButtonAction:(UIButton *)sender{

if( contentPageView ) return ;

remberFrame = sender.frame ;

contentPageView = [[ContentPageViewControlleralloc]init];

contentPageView.transIndex = PageSix_Title;

contentPageView.view.frame = CurrentDeviceBounds;

[self.viewaddSubview:contentPageView.view];

[selffallInTransitionToView:contentPageView.viewwith:backImageViewanimationTime:0.5transContent:nilcompletion:^{

[contentPageViewenterAnimationWhenAppear];

}];

}

- (void)releaseAddSubView{

if(jisuanqiView)

{

[selfgeneryallyAnimationWithView:jisuanqiView.viewanimationType:GenerallyAnimationFadeOutduration:.5delayTime:0finishedBlock:^{

[jisuanqiView.viewremoveFromSuperview];

jisuanqiView=nil;

}];

}

if( !contentPageView ) return ;

backImageView.alpha = 1 ;

backImageView.transform = CGAffineTransformScale(CGAffineTransformMakeRotation(0.0) , 1.f , 1.f);

[selfbackTransitionWithView:contentPageView.viewto:backImageViewtransFrame:remberFrameanimationTime:0.5transContent:nilcompletion:^{

[contentPageView.viewremoveFromSuperview];

contentPageView = nil;

[selfstartAssitentTimer];

[selfstartMenuTimer];

}];

}

- (void)startAssitentTimer{

//    [[self.view viewWithTag:123456] removeFromSuperview];

//

//    AssitentTimer *locView = [[AssitentTimer alloc]initWithFrame:CGRectMake(0, 0, 10, 10)];

//    locView.userInteractionEnabled = NO ;

//    locView.tag = 123456;

//    locView.myDelegate = self ;

//    [self.view insertSubview:locView atIndex:0];

//

//    [locView startTimerWithTime:3 isLoop:YES];

}

- (void)assitentTimerEndWithCurrentView:(UIView *)currentView{

//    int nums = myIcarousel.currentItemIndex;

//    nums ++ ;

//    if( nums >= [contentArray count]*2 ){

//        nums = 0 ;

//    }

//

//    [myIcarousel scrollToItemAtIndex:nums animated:YES];

}

- (void)stopAssitentTimer{

//    [[self.view viewWithTag:123456] removeFromSuperview];

}

#pragma mark -

#pragma mark iCarousel methods

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel

{

return [contentArraycount]*2;

}

- (NSUInteger)numberOfVisibleItemsInCarousel:(iCarousel *)carousel

{

//limit the number of items views loaded concurrently (for performance reasons)

returnNUMBER_OF_VISIBLE_ITEMS;

}

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view

{

//create new view if no view is available for recycling

if (view == nil)

{

view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, ITEM_SPACING, myIcarousel.bounds.size.height)];

view.clipsToBounds = NO ;

UIImageView *downImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 77, 200)];

downImageView.tag = 10 ;

[view addSubview:downImageView];

}

UIImageView *downImageView = (UIImageView *)[view viewWithTag:10];

//    NSString *string = [downImageArray objectAtIndex:index % 4];

downImageView.image = [contentArray objectAtIndex:index%5 ];

return view;

}

- (NSUInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel

{

//note: placeholder views are only displayed if wrapping is disabled

returnINCLUDE_PLACEHOLDERS? 2: 0;

}

- (CGFloat)carouselItemWidth:(iCarousel *)carousel

{

//slightly wider than item view

returnITEM_SPACING;

}

- (BOOL)carouselShouldWrap:(iCarousel *)carousel

{

//wrap all carousels

returnYES;

}

- (CGFloat)carousel:(iCarousel *)carousel itemAlphaForOffset:(CGFloat)offset

{

//set opacity based on distance from camera

return 1.0f - fminf(fmaxf(offset, 0.0f), 1.0f);

}

- (CATransform3D)carousel:(iCarousel *)_carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform

{

//implement 'flip3D' style carousel

transform = CATransform3DRotate(transform, M_PI / 8.0f, 0.0f, 1.0f, 0.0f);

return CATransform3DTranslate(transform, 0.0f, 0.0f, offset * myIcarousel.itemWidth);

}

- (CGFloat)carousel:(iCarousel *)carousel valueForTransformOption:(iCarouselTranformOption)option withDefault:(CGFloat)value

{

switch (option)

{

caseiCarouselTranformOptionArc:

{

return 2 * M_PI * 0.1;

}

caseiCarouselTranformOptionRadius:

{

return value * 1.8;

}

caseiCarouselTranformOptionTilt:

{

return 0.5;

}

caseiCarouselTranformOptionSpacing:

{

return 1;

}

default:

{

return value;

}

}

}

- (void)carouselWillBeginDragging:(iCarousel *)carousel{

[selfstopAssitentTimer];

}

- (void)carouselDidEndDragging:(iCarousel *)carousel willDecelerate:(BOOL)decelerate{

[selfstartAssitentTimer];

}

- (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index{

if( contentPageView ) return ;

[selfstopAssitentTimer];

NSArray *array = [NSArray arrayWithObjects:

[NSNumber numberWithInt:PageOne_Title],

[NSNumber numberWithInt:PageTwo_Title],

[NSNumber numberWithInt:PageThree_Title],

[NSNumber numberWithInt:PageFour_Title],

[NSNumber numberWithInt:PageFive_Title],

nil];

int nums = index % 5 ;

UIView *locView = [myIcarousel itemViewAtIndex:index];

UIImageView *imageView = (UIImageView *)[locView viewWithTag:10];

remberFrame = [locView convertRect:imageView.frame toView:backImageView];

NSLog(@"remberFrame is %@" , NSStringFromCGRect(remberFrame));

contentPageView = [[ContentPageViewControlleralloc]init];

contentPageView.transIndex = [[array objectAtIndex:nums] integerValue];

contentPageView.view.frame = CurrentDeviceBounds;

[self.viewaddSubview:contentPageView.view];

[selffallInTransitionToView:contentPageView.viewwith:backImageViewanimationTime:0.5transContent:nilcompletion:^{

[contentPageViewenterAnimationWhenAppear];

}];

}

- (void)itemsButtonAction:(UIButton *)sender{

int index = sender.tag % 100 ;

if( contentPageView ) return ;

[selfstopAssitentTimer];

NSArray *array = [NSArray arrayWithObjects:

[NSNumber numberWithInt:PageThree_Title],

[NSNumber numberWithInt:PageTwo_Title],

[NSNumber numberWithInt:PageFour_Title],

[NSNumber numberWithInt:PageOne_Title],

[NSNumber numberWithInt:PageFive_Title],

nil];

int nums = index % 5 ;

remberFrame = sender.frame;

NSLog(@"remberFrame is %@" , NSStringFromCGRect(remberFrame));

contentPageView = [[ContentPageViewControlleralloc]init];

contentPageView.transIndex = [[array objectAtIndex:nums] integerValue];

contentPageView.view.frame = CurrentDeviceBounds;

[self.viewaddSubview:contentPageView.view];

[selffallInTransitionToView:contentPageView.viewwith:backImageViewanimationTime:0.5transContent:nilcompletion:^{

[contentPageViewenterAnimationWhenAppear];

}];

[selfstopMenuTimer];

}

//计算器

-(void)calButtonAction:(UIButton *)sender

{

if( contentPageView ) return ;

remberFrame = sender.frame;

contentPageView = [[ContentPageViewControlleralloc]init];

contentPageView.transIndex = PageSix_Title;

contentPageView.view.frame = CurrentDeviceBounds;

[self.viewaddSubview:contentPageView.view];

[selffallInTransitionToView:contentPageView.viewwith:backImageViewanimationTime:0.5transContent:nilcompletion:^{

[contentPageViewenterAnimationWhenAppear];

}];

//    jisuanqiView=[[JiSuanQiViewController alloc]init];

//    jisuanqiView.view.frame=CurrentDeviceBounds;

//    [self.view addSubview:jisuanqiView.view];

//

//    [jisuanqiView enterAnimationWhenAppear];

}

@end