के बाद से UITableView एक UIScrollView उपवर्ग है, तो आप UIScrollViewDelegate विधि को लागू कर सकते हैं:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset
और फिर गणना क्या निकटतम वांछित लक्ष्य सामग्री ऑफसेट जो आप चाहते है, और सेट कि inout CGPoint पैरामीटर पर।
मैंने अभी कोशिश की है और यह अच्छी तरह से काम करता है।
पहले, unguided इस तरह ऑफसेट पुनः प्राप्त:
CGFloat unguidedOffsetY = targetContentOffset->y;
फिर, कुछ गणित, जहां आप इसे होना चाहेंगे के माध्यम से पता लगाएं तालिका शीर्ष लेख की ऊंचाई टिप्पण। यहाँ मेरी कोड में एक नमूना अमेरिकी राज्य का प्रतिनिधित्व करने के लिए कस्टम कोशिकाओं के साथ काम कर रहा है:
CGFloat guidedOffsetY;
if (unguidedOffsetY > kFirstStateTableViewOffsetHeight) {
int remainder = lroundf(unguidedOffsetY) % lroundf(kStateTableCell_Height_Unrotated);
log4Debug(@"Remainder: %d", remainder);
if (remainder < (kStateTableCell_Height_Unrotated/2)) {
guidedOffsetY = unguidedOffsetY - remainder;
}
else {
guidedOffsetY = unguidedOffsetY - remainder + kStateTableCell_Height_Unrotated;
}
}
else {
guidedOffsetY = 0;
}
targetContentOffset->y = guidedOffsetY;
अंतिम पंक्ति ऊपर वास्तव में inout पैरामीटर, जो स्क्रॉल दृश्य बताती है कि यह है में वापस मूल्य लिखते हैं, y- ऑफसेट आप ' इसे पसंद करने के लिए पसंद है।
अंत में, यदि आप एक प्राप्त परिणाम नियंत्रक से निपट रहे हैं, और आप जानना चाहते हैं कि अभी क्या हुआ है, तो आप ऐसा कुछ कर सकते हैं (मेरे उदाहरण में, संपत्ति "राज्य" अमेरिकी राज्यों के लिए एफआरसी है)। मैं उस जानकारी का उपयोग एक बटन शीर्षक सेट करने के:
NSUInteger selectedStateIndexPosition = floorf((guidedOffsetY + kFirstStateTableViewOffsetHeight)/kStateTableCell_Height_Unrotated);
log4Debug(@"selectedStateIndexPosition: %d", selectedStateIndexPosition);
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:selectedStateIndexPosition inSection:0];
CCState *selectedState = [self.states objectAtIndexPath:indexPath];
log4Debug(@"Selected State: %@", selectedState.name);
self.stateSelectionButton.titleLabel.text = selectedState.name;
रवाना विषय नोट: आपका अनुमान सही है, "log4Debug" बयान सिर्फ प्रवेश कर रहे हैं। संयोग से, मैं इसके लिए Lumberjack का उपयोग कर रहा हूँ, लेकिन मैं पुराने Log4Cocoa से कमांड वाक्यविन्यास पसंद करते हैं। इस तरह
धन्यवाद @kra, यह निश्चित रूप से एक आसान एनीमेशन बनाता है और स्क्रॉलव्यू अधिक प्राकृतिक लगता है! –