2012-05-26 14 views
10

संपादित करें:iCarousel रोक सूचकांक उठाया

मैं एक स्लॉट मशीन जैसे ऐप्लिकेशन बना रही हूँ, मैं स्लॉट वस्तु के लिए iCarousel गयी। तो मेरे पास एक बटन है जो iCarousel घुमाता है। मेरे iCarousel दृश्य में दो स्लॉट (स्लॉट 1 और स्लॉट 2) हैं। नीचे मेरी iCarouselView है: (बॉक्स जहां दो carousel है)

enter image description here

यह मैं कैसे स्पिन है मेरी iCarousel: मैं चाहता हूँ:

-(IBAction) spin { 

[carousel1 scrollByNumberOfItems:-35 duration:10.7550f]; 
[carousel2 scrollByNumberOfItems:-35 duration:10.7550f]; 

} 

यहाँ मैं क्या कर करना चाहते हैं है मजबूती से इसे उस सूचकांक पर रोक दें जिसे उपयोगकर्ता चुनता है।

मैं इसे इस तरह से किया है, नीचे दी गई छवि मेरी CustomPicker पॉप अप होता है इसलिए जब उपयोगकर्ता इसे टैप करता एक newViewcontroller कि उस में एक बटन के साथ UIImageView होता है,,। मेरा CustomPicker में कैमरे रोल पर उपयोगकर्ता ने जो चुना है उस पर छवि शामिल है। इसलिए प्रत्येक बटन का एक विशिष्ट मान मेरे iCarouselView पर भेजा जाता है। स्लॉट 2 के लिए स्लॉट 1 और कैरोसेल 2 के लिए कैरोसेल 1।

तो मेरी समस्या कैरोसेल को स्पिन करना है और फिर एक विशिष्ट समय के लिए को वांछित छवि/इंडेक्स को उपयोगकर्ता चुनने के लिए रोकें।

मेरे खराब अंग्रेजी के लिए खेद है। enter image description here

+0

शायद आप किसी भी सरणी में सभी बटन सहेजना चाहते हैं और जब भी कोई बटन क्लिक किया जाता है, तो आप यह निर्धारित कर सकते हैं कि यह कौन सा था, यानी टैग की जांच करके, और फिर अपनी विधि कॉल करें। – Simon

+0

क्या आप केवल 1 बटन से प्राप्त कर सकते हैं? आपकी स्पिन गिनती 7 तक पहुंचने के बाद, आप बटन को सक्षम करते हैं (यह रोशनी या कुछ)। फिर जब उपयोगकर्ता बटन को टैप करता है, तो आप अपनी सरणी या उस प्रकृति के कुछ मौजूदा इंडेक्स को देखते हैं। मैं रास्ता बंद कर सकता हूं क्योंकि मैंने जो वर्णन किया है वह काफी तस्वीर नहीं कर सकता। – Byron

+0

कौन सा हिस्सा आप के लिए अस्पष्ट था? – Bazinga

उत्तर

4

यह आसान है। मैंने पहले कुछ ऐसा किया है।

नीचे निम्न विधि में:

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

    //Configure your view here 
    ..... 

    //Add a button on each view of the carousel 
    UIButton * someButton = [[UIButton alloc] initWithFrame:view.bounds]; 
    [someButton setAlpha:0.0]; 
    [someButton addTarget:self action:@selector(fingerLanded:) forControlEvents:UIControlEventTouchDown]; 
    [view addSubview:someButton]; 
    [view bringSubviewToFront:someButton]; 

    //Add a tag - correspond it to the index 
    someButton.tag = index; 

    //Make sure the view is user interaction enabled 
    [view setUserInteractionEnabled:YES]; 

    //Also make sure the button can actually receive touches and there is no view 
    //blocking touch events from being sent to the button. 

    return view; 
} 

इसके अलावा

- (void) fingerLanded:(id) sender{ 

UIButton * theButtonFingerLandedOn = (UIButton *) sender; 

//This is the index the user tapped his finger on 
NSUInteger index = theButtonFingerLandedOn.tag; 

//Scroll to that particular index 
[self.carousel scrollToItemAtIndex:index animated:YES]; 

}

जोड़ने इसके अलावा

- (void) viewDidLoad{ 

    //You may need this to enable user interaction on a view flying by  
    // Look in the - (void)transformItemViews method of the iCarousel library 
    self.carousel.centerItemWhenSelected = NO; 

} 

तो आपको कुछ ऐसा करना है जोड़ें। उम्मीद है कि यह सहायक था :) !!

+0

देखें, वे दो अलग-अलग दृश्य नियंत्रकों में हैं, न कि 1. – Bazinga

+0

क्या आप गुणों के माध्यम से दो व्यू नियंत्रकों के बीच मूल्यों को पारित कर सकते हैं? सही? – clearwater82

0

UIButton को विस्तारित किए बिना आप बटन पर एक अद्वितीय टैग जोड़ सकते हैं, UIEvent के स्रोत से टैग प्राप्त कर सकते हैं।

आईई:

-(void) buttonSetupMethod { 
    for(each item) { 
     UIButton * button = [[UIButton alloc] init]; 
     ... additional setup ... 
     button.tag = SOME_UNIQUE_TAG_FOR_BUTTON; 
     [button addTarget:self action:@selector(processaction:) forControlEvents:desiredEvents]; 
     ... retain button ... 
    [button release]; 
    } 
} 

-(void) processAction:(id) source 
{ 
    UIButton * button = (UIButton *) source; 
    int tag = button.tag; 
    ... conditional logic on specific tag ... 
} 
अतिरिक्त जानकारी के लिए

पैरामीटर प्रदान करने पर देखें: Passing parameters on button action:@selector

+0

हाय मैंने अपना प्रश्न संपादित किया। कृपया देखें। – Bazinga

0

आप अपने tableview विचार क्यों नहीं होगा, नीचे दिनचर्या फोन लेने:

[carousel scrollByNumberOfItems:-35 duration:10.7550f]; 

और उस डाल एक और गैर-कार्यवाही दिनचर्या में, और TableView didSelectItemAtIndex विधि आपके नए दिनचर्या को कॉल करें, और अपनी क्रिया दिनचर्या इसे कॉल करें।

-(void)newRoutineToCall:(int)itemsToMove{ 
    [carousel scrollByNumberOfItems:itemsToMove duration:10.7550f]; 
} 

-(IBAction) spin {   
    [self newRoutineToCall:-35]; 
} 

फिर

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
    [self newRoutineToCall:[indexPath row]]; 
} 
+0

हाय मैंने अपना प्रश्न संपादित किया। कृपया – Bazinga

0

ठीक लागू करें, मुझे सवाल अलग ढंग से व्यक्त की कोशिश करते हैं: आप छवियों की एक सरणी एक विशेष एक "carousel1Image" के साथ "imageArray" (newViewController रूप से चयनित) की है। आप कैरोसेल को एन सेकेंड के लिए चारों ओर घूमना चाहते हैं और फिर विशेष पर उतरना चाहते हैं?

अगर वह सही है, कुछ इस तरह काम करना चाहिए ...

-(void) spinCarousel: (iCarousel *) carousel toIndex:(NSInteger) targetIndex { 
    NSInteger imagesPerSecond = 5; 
    double secondsToScroll = 10.7550f; 

    NSUInteger currIndex = [carousel currentItemIndex]; 
    NSUInteger numItems = [carousel numberOfItems] + [carousel numberOfPlaceholders]; 
    NSUInteger timesAround = floor(secondsToScroll*imagesPerSecond/numItems); 
    NSInteger numToScroll = timesAround*numItems + targetIndex-currIndex; 
    [carousel scrollByNumberOfItems:numToScroll duration: secondsToScroll]; 

} 

[self spinCarousel: carousel1 toIndex:[imageArray indexOfItem:carousel1Image]]; 
[self spinCarousel: carousel2 toIndex:[imageArray indexOfItem:carousel2Image]]; 

==== ओल्ड उत्तर ====

मैं क्या लक्ष्य है के बारे में दूसरों के भ्रम को साझा करें।उदाहरण के लिए, यह स्पष्ट नहीं है कि "मूल्य" क्या है और आपको अपनी स्लॉट मशीन के साथ क्या करना है? "मैं चाहता हूं कि उपयोगकर्ता अपनी आखिरी कीमत चुन ले, इसका मतलब है कि आखिरी दृश्य या छवि जहां मेरा आईकरौसेल रुक सकता है" क्षमा करें, लेकिन यह शब्द "कीमत" की मेरी समझ से मेल नहीं खाता है।

लेकिन अंत में अपने परिदृश्य को पढ़ना: "मैं क्या चाहता हूं जब उपयोगकर्ता यूआईटीबल व्यूसेल या सरणी से एक विशिष्ट छवि के साथ थंबनेल पर क्लिक करता है, तो यह मेरे UIButton स्पिन पर कुछ/मूल्य पारित करेगा, ताकि छवि से क्लिक हो UITableViewCell अंतिम कीमत होगी। " मैं समझता हूं कि किसी भी तरह के एक मूल्य है कि आपके स्पिन बटन तक पहुंच की आवश्यकता है या यह कि प्रत्येक छवि के लिए एक मूल्य है कि आपके स्पिन बटन तक पहुंच की आवश्यकता है। कोई भी सरल लगता है, इसलिए मुझे यकीन नहीं है कि सवाल क्यों है।

मान लीजिए कि यह पहला (एक ही कीमत) है, तो आप अपने सेटिंग्स नियंत्रक को उस मूल्य के साथ एक संपत्ति क्यों सेट नहीं कर सकते हैं (जैसा कि आप अपनी छवि NSMutableArray को कैसे पास करते हैं)?

यदि यह दूसरा (प्रत्येक छवि के लिए एक मान) है, तो या तो दो समानांतर सरणी बनाएं, एक मूल्य के साथ और छवि के साथ एक, या इसमें शब्दकोशों के साथ एक सरणी है, प्रत्येक एक मूल्य और एक छवि के साथ।

संबंधित मुद्दे