【问题标题】:Translating UIScroll and UIPageControl from Objective C to swift将 UIScroll 和 UIPageControl 从 Objective C 转换为 swift
【发布时间】:2014-12-23 20:03:15
【问题描述】:

你会如何用 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;

【问题讨论】:

  • 你对斯威夫特了解多少?你在哪些方面苦苦挣扎?
  • 好吧,我知道我想将我的 UIScrollView 与我的 PageController 连接起来,这有我需要的资源,但是我在调​​用 pageController 的函数时遇到了错误。比如说我有 func changePage(sender: UIPageControl){ pageControl.currentPage - 有一个错误指出没有可用的 pageControl.currentPage }

标签: swift uiscrollview uipagecontrol


【解决方案1】:

首先,我强烈建议您阅读有关 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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多