swift - 将 UIScroll 和 UIPageControl 从 Objective C 翻译成 swift

标签 swift uiscrollview uipagecontrol

你会如何用 swift 写这个?我在翻译时遇到了问题,因为 swift 是我的第一语言,而这一切都是用 Objective C 编写的。

UIScrollView * scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 3, scrollView.frame.size.height);
    scrollView.delegate = self;

    UIPageControl * pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 90, scrollView.frame.size.width, 20)];
    pageControl.numberOfPages = scrollView.contentSize.width/scrollView.frame.size.width;
    [pageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged];

Then you need to add the following two methods:

- (IBAction)changePage:(id)sender {
    CGFloat x = pageControl.currentPage * scrollView.frame.size.width;
    [scrollView setContentOffset:CGPointMake(x, 0) animated:YES];
}

-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView  {
    NSInteger pageNumber = roundf(scrollView.contentOffset.x / (scrollView.frame.size.width));
    pageControl.currentPage = pageNumber;

最佳答案

首先要做的事 - 我强烈建议您阅读有关 Swift 和 Objective-C 互操作性的资源。参见 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/了解更多详情。

Swift 是一种有自己惯用语的语言。可以通过多种方式将 Objective-C 代码翻译成它们。例如,在 Objective-C 中处理对象时必须使用指针,这隐含地使 nil 引用成为可能。 Swift 使用可选类型来表达这一点,因此 UIScrollView * scrollView 可以翻译成 let scrollView : UIScrollViewlet scrollView : UIScrollView?,具体取决于上下文。

当然,这只是冰山一角。翻译中可能发生的变化取决于上下文,因此在开始迁移代码之前学习和理解基本的 Swift 会更好。

好的,既然我们现在清楚了,下面是翻译:

let scrollView = UIScrollView(frame: CGRectMake(0, 0, 100, 100))
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 3, scrollView.frame.size.height)
scrollView.delegate = self
let pageControl = UIPageControl(frame:CGRectMake(0, 90, scrollView.frame.size.width, 20))
pageControl.numberOfPages = Int(scrollView.contentSize.width / scrollView.frame.size.width)
pageControl.addTarget(self, action: Selector("changePage:"), forControlEvents: UIControlEvents.ValueChanged)


func changePage(sender: AnyObject) -> () {
    let x = CGFloat(pageControl.currentPage) * scrollView.frame.size.width
    scrollView.setContentOffset(CGPointMake(x, 0), animated: true)
}

func scrollViewDidEndDecelerating(scrollView: UIScrollView) -> () {
    let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width);
    pageControl.currentPage = Int(pageNumber)
}

关于swift - 将 UIScroll 和 UIPageControl 从 Objective C 翻译成 swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27627236/

相关文章:

ios - 尝试在 iOS 上获取 SF Pro Display Thin Italics

ios - 如何计算与窗口大小相关的距离

ios - UITapGestureRecognizer 无法在 UIScrollView 中工作

iphone - 自动调整 UITextView 和 UIScrollView 的大小

ios - 如何使 UIPageControl 在屏幕底部重叠主页指示器

ios - 仅用于滑动的 UIPageControl

objective-c - 方向更改后居中 UIPageControl

ios - 以编程方式填充 UITableViewCells - Swift

swift - 保存条形图 View 时不显示条形图

ios - 禁用 UIScrollView AutoLayout Resizable ScrollView 的水平滚动